我有一个包含下一个信息的字典容器:
{ID=412, CATEG=1},
{ID=413, CATEG=2},
{ID=414, CATEG=3},
{ID=415, CATEG=4}
我需要构建一个字符串查询,以便在SQL SERVER中执行它,类似于:
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)
问题是我的容器现在有4个元素,如果它有200个我会有200个OR?
有关避免太多OR的任何想法? (我需要一个字符串查询,我不能使用存储过程)
提前致谢
答案 0 :(得分:1)
您可以使用join
代替,将值放在派生表中:
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;
答案 1 :(得分:0)
如果您可以将该字典容器存储在表中,则可以更容易地在(IN)子句中使用它,如下所示:
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)
并且随着Dictionary表记录的增加,查询将一直没有多个(OR)修复。