迭代SQL中的“IN”子句而没有循环

时间:2017-12-27 16:17:50

标签: sql oracle

有没有办法在SQL语句中迭代“IN”子句而不必实现某种循环?

我的例子是:

SELECT *
FROM store_table
WHERE store_a IN (1,2,3,4,5,6,7,8,9,10);

有没有办法列出编写某种代码的方式,而不是必须列出所有的商店:

SELECT * 
FROM store_table
WHERE store_a IN (1,2,...10); 

我知道上面的内容不是真正的SQL语法,但为了举例,我想以这种方式使用它。我知道,如果你想查看所有商店,有许多不同的方式,从语法上来说,但我只是担心前100或后20或等......

我问这个的原因是因为如果你有1000个商店并且你想要看到前500个,那么你将会遇到一些相当长且烦人的代码。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

如果您想查看前500个商店,请使用:

select st.*
from (select st.*
      from store_table st
      order by store_a
     ) st
where rownum <= 500;

这假设每个“store”有一行,这对于具有该名称的表是有意义的。

在Oracle 12C +中,您可以使用fetch first 500 rows only而不必使用子查询。

答案 1 :(得分:0)

使用between而不是in运算符,例如

SELECT * 
FROM store_table
WHERE store_a BETWEEN 1 AND 10