使用IN语句的SQL查询搜索

时间:2018-12-11 21:25:53

标签: sql oracle-sqldeveloper

我经常在工作中收到请求,询问是否可以告诉请求者我们公司的某些商店是否收到了一定数量的特定项目编号。我有一个查询,可以轻松地让我放入500个以上的商品编号列表,并吐出(例如)该商品超过100个的商店。问题是我必须将数据拉回到excel文件中,并使用vlookups对存储进行转换,以获得最终答案。有人可以告诉我需要使用什么功能来检查商店和商品编号的有序列表中的特定组合吗?
例如,在表的单行中,我想查看商店100是否收到超过5个项目1234。我有500多对成对的行,我想查询“大于5”的数量。商店和商品编号永远不会有非唯一的组合。每行都是不同的。

示例:
商店| ItemNumber
1 | 1234
2 | 4567
1 | 4567

编辑:我的公司仅授予我对数据的只读访问权限,因此我不确定是否可以使用临时变量和表。

2 个答案:

答案 0 :(得分:0)

您可以构造一个复杂的where条件:

select t.*
from t
where (store = 1 and item = 1234 and quantity >= 5) or
      (store = 2 and item = 567 and quantity >= 10) or
      . . . 

编辑:

我明白了。您的数据结构是您要传递的数据。如果仅在应用程序中,则可以创建查询,例如:

select t.*
from t
where (store = 1 and item = 1234 and quantity >= 5) or
      (store = 2 and item = 567 and quantity >= 5) or
      . . . ;

某些数据库使用元组,从而允许:

select t.*
from t
where (store, item) in ((1, 1234) (2, 567), . . . ) and
      quantity >= 5;

或者,如果商店/商品对已经在数据库中:

select t.*
from t join
     storeitems si
     on t.store = si.store and t.item = si.item
where t.quantity >= 5;

答案 1 :(得分:0)

SQL SERVER,您可以使用values生成派生表并简单地加入

SELECT *
FROM (VALUES (1,1234),(2,4567)(1,4567)) AS Filter(Store,Item)
INNER JOIN (yourQuery) B
 on Filter.Store = B.Store
and Filter.Item = B.Item
WHERE B.QTY > 5

这也可以通过使用union all和一个子查询并加入

来完成

某些RDBMS支持复杂的in

where (Store, item) in ((1,1234),(2,4567),(1,4567)) and  QTY > 5