gpt4 book ai didi

mysql - SQL 从多对多表中选择精确匹配

转载 作者:行者123 更新时间:2023-11-29 19:45:12 26 4
gpt4 key购买 nike

给定一个与订单和产品相关的 SQL 表。

CREATE TABLE Order_Product(
unid INT NOT NULL AUTO_INCREMENT,
order_id INT NOT NULL,
product_id INT NOT NULL,
PRIMARY KEY (product_id)
)ENGINE=InnoDb AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

如何判断数据库中是否存在包含特定产品列表(仅指定产品,不多或少)的订单?我当前的 SQL 查询组合了两个表,第一个表用于检查哪些订单包含产品(例如 34,48),第二个表用于搜索订单是否不包含更多产品。

SELECT *
FROM ( SELECT COUNT(op.order_id) hits, op.order_id
FROM Order_Product op
WHERE op.product_id IN (34,48)
GROUP BY op.order_id
HAVING COUNT(op.order_id ) = 2

) AS tabone
JOIN ( SELECT COUNT(op.order_id) total, op.order_id
FROM Order_Product op
GROUP BY op.order_id
) AS tabtwo
ON tabtwo.order_id = tabone.order_id
WHERE hits = total

你能想象一种更简单的方法来实现这一目标吗?

最佳答案

试试这个(我假设您正在查找包含列表中至少一种产品而不是列表中的所有产品的订单):

select *
from Order_Product as op1
where exists (
select 1
from Order_Product as op2
where op2.order_id = op1.order_id
and op2.product_id in (34, 38)
)
and not exists (
select 1
from Order_Product as op3
where op3.order_id = op1.order_id
and op3.product_id not in (34, 38)
)

关于mysql - SQL 从多对多表中选择精确匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41064719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com