2009-12-17 3 views
0

Nous utilisons hibernate pour gérer différentes bases de données. L'utilisation de la comparaison de paires sql pose un problème lorsque la source de données est MS SQL. Nous voulons savoir comment convertir cette instruction pour ms sql.Conversion de la comparaison de paires sql pour MS SQL dans Hibernate

Ce qui suit est le sql simplifié.

avis:

  1. colonne1 et les deux colonne2 sont de type UUID et numérique. (En ms sql sera numérique (19,0)
  2. l'instruction SQL convertie doit suivre la forme -. WHERE dans les sous-requête
  3. nouvelle déclaration devrait prendre la performance d'exécution en considération

Code:.

select * from table1 t1 
where (t1.column1, t1.column2) in 
      select (sub.column1, sub.column2) from table2 sub 
      where sub.column3 = $var 

ce qui suit est mon procès j'ai peur de son faible rendement sur la comparaison des chaînes et l'indice ne faisant aucun effet

SELECT * 
FROM TABLE_1 T1 
WHERE CAST(COL1 AS VARCHAR(19))+CAST(COL2 AS VARCHAR(19)) 
IN (SELECT CAST(COL1 AS VARCHAR(19))+CAST(COL2 AS VARCHAR(19)) 
    FROM TABLE_2 T2 
    WHERE T2.COL3 = 'A') 

est-ce qu'il y a une suggestion pour nous? merci beaucoup !!

Répondre

2

Pourquoi devez-vous faire une clause Where-In plutôt qu'une jointure?

 
select 
    t1.* 
from 
    table1 t1 
    inner join table2 sub on 
     t1.column1 = sub.column1 
     and t1.column2 = sub.column2 
     and sub.column3 = $var 

0

Le tableau est On suppose comme:

CREATE TABLE SuperHeroes 
(
    name varchar(100), 
    franchise varchar(100) 

); 

Les données actuelles est

'Batman', 'DC' 
'SpiderMan', 'Marvel' 
'Superman', 'DC' 
'Wolverine', 'Marvel' 

Vous vouliez interroger comme

SELECT name, franchise 
FROM SuperHeroes 
WHERE 
(name, franchise) 
IN 
( 
'Superman', 'DC', 
'Wolverine', 'Marvel' 
) 

Mais cette coutume execute. Comme c'est une erreur de syntaxe. La syntaxe correcte est

SELECT name, franchise 
FROM SuperHeroes h 
WHERE 
NOT EXISTS 
(
    (SELECT h.name, h.franchise) 
    EXCEPT 
    ( 
    SELECT 'Superman', 'DC' 
    UNION 

    SELECT 'Wolverine', 'Marvel' 
    ) 
) 

Espérons que cela fonctionnera.