Oracle
 sql >> Database >  >> RDS >> Oracle

Clausola 'In' nel server SQL con più colonne

Questa sintassi non esiste in SQL Server. Usa una combinazione di And e Or .

SELECT * 
FROM <table_name> 
WHERE 
  (value_type = 1 and CODE1 = 'COMM')
  OR (value_type = 1 and CODE1 = 'CORE') 

(In questo caso, potresti renderlo più breve, perché value_type viene confrontato con lo stesso valore in entrambe le combinazioni. Volevo solo mostrare il modello che funziona come IN in Oracle con più campi.)

Quando si utilizza IN con una sottoquery, è necessario riformularla in questo modo:

Oracolo:

SELECT * 
FROM foo 
WHERE 
  (value_type, CODE1) IN (
    SELECT type, code 
    FROM bar
    WHERE <some conditions>)

SQL Server:

SELECT * 
FROM foo 
WHERE 
  EXISTS (
    SELECT * 
    FROM bar 
    WHERE <some conditions>
      AND foo.type_code = bar.type 
      AND foo.CODE1 = bar.code)

Ci sono altri modi per farlo, a seconda dei casi, come inner join e simili.