gpt4 book ai didi

MySQL - 根据子记录上冲突的 WHERE 子句返回父记录

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

我是一个包含下表的数据库:

订单、线路、供应商

行表与订单和行表有 FK:

订单 ID、供应商 ID

我正在尝试编写一个查询,该查询将返回订单记录的计数,这些订单记录中至少有一行来自某个供应商,但没有来自任何其他供应商的行。

因此,只有 1 行但该行来自给定供应商的订单将被计算在内。

另一方面,来自给定供应商的包含 100 行的订单,但来自任何其他供应商的只有 1 行的订单将不被计算在内。

我可以很容易地计算出至少有一行的订单,但我坚持排除那些来自其他供应商的订单。

SELECT
COUNT(DISTINCT(orders.id)) AS count
FROM orders
INNER JOIN lines
ON lines.order_id = orders.id
WHERE
lines.supplier_id = 1

有没有一种简单的方法可以做到这一点(最好没有子查询,因为我这里已经是一个更大的查询的一部分)?

任何建议表示赞赏。

谢谢

最佳答案

咖啡前的粗略猜测:

SELECT orders.id, SUM(lines.supplier_id = 1) AS wanted,
SUM(lines.supplier_id <> 1) AS unwanted
FROM orders
INNER JOIN lines lines.order_id = orders.id
GROUP BY orders.id
HAVING unwanted = 0 AND wanted > 0

基本上:获取所有订单并使用方便的 mysql hack,其中上述 SUM 获取供应商 ID 比较的 bool 结果,并将它们自动转换为整数 10.使用此“计数”来计算出哪些订单包含您所需的供应商,对于任何其他供应商,“总和”为 0。

关于MySQL - 根据子记录上冲突的 WHERE 子句返回父记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646663/

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