[英]MYSQL - Select values in table A where all the corresponding values in table B have a specific values
我有两个表, orders
和ordered_products
。
ORDERS
|ORDERS_ID|CUSTOMER NAME|...
|1 |PIPPO |...
|2 |PLUTO |...
ORDERED PRODUCTS
|ORDERED_ID|ORDERS_ID|PRODUCT |PRODUCT_TYPE|...
|1 |1 |ProdottoA| 1 |...
|2 |1 |ProdottoB| 2 |...
|3 |1 |ProdottoC| 1 |...
|4 |2 |ProdottoD| 2 |...
我需要两个查询,第一个查询选择所有类型至少为 1的产品,第二个查询选择所有类型均为1的产品。
对于第一个,我使用以下查询解决了:
select distinct orders_id from ORDERS o left join ORDERED_PRODUCTS op on (o.orders_id=op.orders_id) where op.product_type = '1'
但是我找不到第二个查询的解决方案。
找到解决方案! 我用了:
select distinct orders_id from ORDERS o left join ORDERED_PRODUCTS op on (o.orders_id=op.orders_id)
where
(select count(ordered_id) from ordered_products op where op.orders_id = o.orders_id)
=
(select count(ordered_id) from ordered_products op where op.orders_id = o.orders_id and op.orders_products_categorizzazione='1')
感谢您的帮助
未经测试,但这应该工作:
select orders_id
from orders
where
(
select count(distinct product)
from ordered_products
where ordered_products.orders_id = orders.orders_id
and ordered_products.product_type = 1
)
=
(
select count(distinct product)
from ordered_products
where ordered_products.product_type = 1
);
它能做什么 :
它远未优化,可能还有更好的方法,但它确实有效,而且易于理解。
PS:如果您可以选择数据库结构,那么我会为产品本身使用不同的表。 更适合UML规范,更少的冗余,更好的索引编制。
第一个查询:
SELECT *
FROM Orders
WHERE Exists (select null
from ordered_products
where
orders.orders_id = ordered_products.orders_id
and product_type=1)
第二个:
SELECT *
FROM Orders
WHERE
Orders_id in (select orders_id
from ordered_products
where ordered_products.orders_id = orders.orders_id
group by orders_id
having sum(if(product_type=1,1,0))=count(*))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.