我是一个具有以下表格的数据库:
订单,行,供应商
线表对订单和线表具有FK:
order_id,供应商ID
我正在尝试编写一个查询,该查询将返回订单记录的计数,该订单记录中至少有一个来自某个供应商的行,而没有任何其他供应商的行。
因此,仅包含1条生产线但来自给定供应商的生产线的订单将被计算在内。
另一方面,给定供应商的100行订单,而其他任何供应商的订单都不会被计入。
我可以很容易地计算至少一条生产线的订单,但我坚持排除其他供应商生产的订单。
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技巧,上面的SUM会获取供应商ID比较的布尔结果,并将它们自动转换为integer1
和0
。使用此“计数”可以找出哪些订单包含所需的供应商,对于其他任何供应商,其“总和”为0。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句