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