我必须针对完全不实用的Where / In子句测试我的Select语句返回。我确信可能会因为成千上万的数字而被检查更糟糕,但这对我来说很糟糕,尽管它有效。
Where p.description Like '%UbD%'
Or pa.text Like '%UbD%'
And p.state_code_id IN ('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','65')
我怎么能让声明检查'1-50','65'呢?可能吗?我正在使用oracle。
答案 0 :(得分:3)
试试这个:
Where p.description Like '%UbD%'
Or pa.text Like '%UbD%'
And ((p.state_code_id BETWEEN 1 AND 50) OR p.state_code_id = 65)
答案 1 :(得分:1)
AND ((p.state_code BETWEEN 1 AND 50) OR p.state_code = 65)
答案 2 :(得分:1)
不更改查询,但使其更易于维护。将数据放入表中并使用子查询...
Where p.description Like '%UbD%'
Or pa.text Like '%UbD%'
And p.state_code_id IN (SELECT ID FROM States)
答案 3 :(得分:0)
假设正状态代码且没有0,您可以使用:
AND (p.state_code_id <= 50
OR p.state_code_id = 65)
答案 4 :(得分:0)
如果您的代码始终相同,请执行其他人所说的话。如果不同,则创建临时表。将所有您想要的值插入新的(临时表)并在上加入 。
SELECT p.*
FROM p, temp
WHERE p.description Like '%xyz%' AND p.state_code == temp.code