MySQL Group By删除单个结果?

时间:2016-01-24 19:04:47

标签: php mysql

我有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

提前致谢。

1 个答案:

答案 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。