sql server查询也是" ORs"条款

时间:2016-07-14 12:56:03

标签: sql-server

我有一个包含下一个信息的字典容器:

{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的任何想法? (我需要一个字符串查询,我不能使用存储过程)

提前致谢

2 个答案:

答案 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)修复。