我有3张桌子,我正在加入。如果数据存在于所有3个表中,它会很有效,但在这种情况下,由于我假设的连接方式,它将返回每行3个。
所以,为了摆脱重复,我将GROUP BY的名称留下,留下每个独特行中的1个,这很棒。
但是,如果第三个表是EMPTY,则它根本不返回任何行。如果我删除GROUP BY部分,它将返回每行1。
所以我的问题是双重的: 1.为什么会这样? 2.我该如何解决?
简而言之,问题是: “当使用group by时,为什么MySQL只删除行,如果只找到1个。”
例如,如果我收回这些名字: 汽车 电话 电视
我按名字去了一个小组,它根本不返回任何内容。如果它是这样的:
Car
Phone
TV
Car
Phone
TV
该小组按预期工作,并给我留下1个。
这是SQL(最后使用group-by):
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
提前致谢。
答案 0 :(得分:1)
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
,这意味着如果任何表缺少匹配记录,结果将被排除。 Ref
通过使用LEFT JOIN
,最终结果表中的那些列将填充NULL。