必须是一个更好的方法来做这个SQL WHERE / IN

时间:2013-07-08 21:51:14

标签: sql oracle

我必须针对完全不实用的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。

5 个答案:

答案 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