Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找是否存在';一个集合中至少有一个公共属性_Sql_Oracle - Fatal编程技术网

Sql 查找是否存在';一个集合中至少有一个公共属性

Sql 查找是否存在';一个集合中至少有一个公共属性,sql,oracle,Sql,Oracle,我正在尝试使用Oracle SQL查询进行验证,其想法是: 有项目,每个项目可能有多个供应商 我有一套物品(在一个购物袋里),我想确认它们之间是否至少有一个共同的供应商。这意味着,袋子中的所有物品共享至少一个供应商 简化后的表格如下: 带有行李id和物品列的行李表。 带有项目和供应商列的供应表 谢谢大家! 这将为您提供一个与多个项目匹配的供应商列表,最常见的供应商位于顶部 SELECT SUPPLY.supplier, COUNT(SUPPLY.item) item_count FROM BAG

我正在尝试使用Oracle SQL查询进行验证,其想法是:

有项目,每个项目可能有多个供应商

我有一套物品(在一个购物袋里),我想确认它们之间是否至少有一个共同的供应商。这意味着,袋子中的所有物品共享至少一个供应商

简化后的表格如下:

带有行李id和物品列的行李表。
带有项目和供应商列的供应表


谢谢大家!

这将为您提供一个与多个项目匹配的供应商列表,最常见的供应商位于顶部

SELECT SUPPLY.supplier, COUNT(SUPPLY.item) item_count
FROM BAG
JOIN SUPPLY
  ON BAG.item = SUPPLY.item
GROUP BY SUPPLY.supplier
HAVING COUNT(SUPPLY.item) > 1
WHERE BAG.bag_id = ? --substitute bag_id
ORDER BY COUNT(SUPPLY.item) DESC
如果需要查找与包中所有项目匹配的供应商,请使用以下查询:

SELECT SUPPLY.supplier
FROM BAG
JOIN (SELECT bag_id, COUNT(*) as item_count FROM BAG GROUP BY bag_id WHERE bag_id = ?) bag_count
  ON BAG.id = bag_count.bag_id
JOIN SUPPLY
  ON BAG.item = SUPPLY.item
GROUP BY SUPPLY.supplier
HAVING COUNT(SUPPLY.item) = bag_count.item_count
WHERE BAG.bag_id = ?

通过使用
EXISTS
语句包装此列表,可以检查列表是否为空,以确定是否不存在常见供应商。

如果每个供应商提供多个项目,则查询实际上返回每个供应商提供的项目数。我想我可以将最重要的结果与列表中的项目进行比较。尽管如此,这并不是我所要求的,但还是要谢谢你共同供应商-您是指任何共同供应商还是所有共同供应商?我是指所有项目中的共同供应商。如中所述,至少有一家供应商提供所有物品。真的不知道,但是,该查询不只是返回每个项目的主要供应商吗?该查询返回您要求的内容,即它返回袋子是否至少包含一个主要产品,即在您的术语中,即“ant验证他们之间是否至少有一个共同供应商”,实际上,当我说共同供应商时,我指的是所有物品共享的供应商。所有项目具有共同点的供应商。对不起,如果我表达错了。。
select case when exists
                       (
                        select 1
                        from bag b
                             inner join item i on i.id = b.item_id
                             inner join supplier s on s.id = i.supplier_id
                                                   and s.is_main = 'Y'
                       )
             then 'Y'
             else 'N'   
       end contains_main_supplier                   
from dual