2016-07-14 4 views
0

einen Wörterbuch Behälter mit nächsten Info haben:SQL Server-Abfrage mit einem zu „RUP“ Klauseln

{ID=412, CATEG=1}, 
{ID=413, CATEG=2}, 
{ID=414, CATEG=3}, 
{ID=415, CATEG=4} 

Ich brauche eine String-Abfrage zu konstruieren, für sie in SQL Server, so etwas auszuführen:

select * from PASSAGES psg 
where (psg.ID = 413 AND psg.CATEGORY_ID = 2) 
       OR (psg.ID = 414 AND psg.CATEGORY_ID = 3) 
       OR (psg.ID = 415 AND psg.CATEGORY_ID = 4) 
       OR (psg.ID = 416 AND psg.CATEGORY_ID = 5) 

Das Problem ist, dass mein Container jetzt 4 Elemente hat, wenn es 200 hätte, hätte ich 200 ODERs ??

Jede Idee, zu viele ORs zu vermeiden? (Ich brauche eine String-Abfrage, ich nicht eine gespeicherte Prozedur verwenden kann)

Dank im Voraus

Antwort

1

Sie ein join stattdessen verwenden könnte, um die Werte in einer abgeleiteten Tabelle setzen:

select p.* 
from passages p join 
    (values (413, 2), (414, 3), (415, 4), (416, 5) 
    ) v(id, category_id) 
    on p.id = v.id and p.category_id = v.category_id; 
+0

War gleich zu beantworten, aber mit einer Union alle n Wählen Sie .. –

+0

Man, du bist ein Assistent. Ich habe eine unangenehme Idee zum Erstellen eines benutzerdefinierten Tabellentyps ausgearbeitet. –

0

Wenn Sie dass Wörterbuch Behälter in einer Tabelle gespeichert werden kann, wird es leichter sein, es so in einer (iN) Klausel zu verwenden:

SELECT * FROM PASSAGES AS psg 
JOIN Dictionary AS D ON psg.ID = D.ID 
WHERE psg.ID IN (D.ID) AND psg.CATEGORY_ID IN (D.CATEG) 

und wie die Dictionary-Tabelle Datensätze erhöhen t Die Abfrage wird immer ohne Multiple (ORs) festgelegt.

Verwandte Themen