gpt4 book ai didi

mysql - 强制连接第一个表中的所有行

转载 作者:行者123 更新时间:2023-11-29 02:05:36 25 4
gpt4 key购买 nike

我有三个表,machines 包含自动售货机,products 包含所有可能的产品,machines_products 是两者的交集,给出特定机器中每个产品线的库存量。如果一个产品没有入库,则第三个表中没有相应的行。

DESCRIBE machines_products;
+------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+-------+
| machine_id | int(10) unsigned | NO | PRI | 0 | |
| product_id | int(10) unsigned | NO | PRI | 0 | |
| quantity | int(10) unsigned | NO | | 0 | |
+------------+------------------+------+-----+---------+-------+

每种产品都有一个类别(想想巧克力棒和饮料瓶),机器知道它可以销售什么类别的产品。我想要该类别所有产品的结果表,以及特定机器的数量。我已经做到了这一点:

SELECT products.*, SUM(quantity) qty
FROM products
LEFT JOIN machines_products USING (product_id)
WHERE machine_id=m AND category_id=c
GROUP BY product_id;

问题是这会过滤掉所有没有数量的行,而我想要的是左表中的所有行,如果没有相应的,则 qty 列中的 NULL/0右侧表格中的行。

顺便说一句:这不是作业题!我 30 岁,坐在办公室里 :o)

最佳答案

SELECT p.*
, SUM(mp.quantity) AS qty
FROM products p
LEFT JOIN machine_products mp
ON mp.product_id = p.product_id
AND mp.machine_id = m --- this condition moved from WHERE to ON
WHERE p.category_id = c
GROUP BY p.product_id

关于mysql - 强制连接第一个表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609059/

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