在多对多表中,如何查找所有条件匹配的ID,但是一行符合一个标准而另一行符合另一个标准?
例如,假设我有一个将购物车映射到产品的表格,以及另一个定义产品的表格。
如何找到每个标准至少有一个匹配的购物车?
标准可以是,例如product.category like '%fruit%'
,product.category like '%vegetable%'
等
最终我希望得到一个shopping cart ID
(可能是所有这些,但在我的具体情况下,我很乐意获得任何匹配的ID),其中至少有一个匹配。
答案 0 :(得分:0)
我假设一个名为cart_per_product的表,其中包含字段cart,product和一个名为product的表,其中包含字段product,category。
select cart from cart_per_product c
where exists
(
select 1 from product p1 where p1.product=c.product and p1.category like N'%fruit%'
)
and exists
(
select 1 from product p2 where p2.product=c.product and p2.category like N'%vegetable%'
)
答案 1 :(得分:0)
您可以将ANY和ALL运算符与外连接结合使用。 M:N关系中的simple sample:
select p.name
from products p
where id_product = ALL -- all operator
( select pc.id_product
from categories c
left outer join product_category pc on pc.id_product = p.id_product and
pc.id_category = c.id_category
)
答案 2 :(得分:0)
我认为你可以找出列名
select c.id
from cart c
join product p
on c.pID = p.ID
group by c.id
having count(distinct p.catID) = (select count(distinct p.catID) from product)
答案 3 :(得分:0)
可能不是最有效的通用方法:
with data as (
select *,
count(case when <match condition> then 1 end)
over (partition by cartid) as matches
from <cart inner join products ...>
)
select * from data
where matches > 0;