我有 3 个表,我正在连接在一起。如果数据存在于所有 3 个表中,它工作得很好,但在这种情况下,由于我假设的连接方式,它将返回每行的 3 个。
因此,为了摆脱重复项,我按名称分组,每只剩下 1 行,这很棒。
但是,如果第三个表为空,则根本不返回任何行。如果我删除 GROUP BY 部分,它会返回每行的 1
。所以我的问题是 2 重的:1. 为什么会这样?2. 如何修复?
简而言之,问题是:"为什么MySQL在使用分组依据时只找到每行1行时删除行"。
例如,如果我得到这些名字:汽车电话电视
我按名称去一个组,它根本不返回任何内容。 如果是这样的:
Car
Phone
TV
Car
Phone
TV
该小组按预期工作,并给我留下了每人 1 个。
这是 SQL(末尾是分组):
SELECT name, amount, amount_left
FROM `template_useages_products`
JOIN products ON template_useages_products.product_id = products.id
JOIN leftovers ON leftovers.template_useages_id = template_useages_products.template_useages_id
WHERE template_useages_products.template_useages_id = ?
GROUP BY name
提前谢谢。
SELECT
name, amount, amount_left
FROM
template_useages_products
LEFT JOIN products ON template_useages_products.product_id = products.id
LEFT JOIN leftovers ON leftovers.template_useages_id = template_useages_products.template_useages_id
WHERE
template_useages_products.template_useages_id = ?
GROUP BY
name
请改用LEFT JOIN
。 JOIN
在 MySQL 中默认是指INNER JOIN
,这意味着如果任何表缺少匹配记录,结果将被排除。裁判
通过使用 LEFT JOIN
,最终结果表中的那些列将填充 NULL。