gpt4 book ai didi

mysql - 我的 Where 条件没有返回表中的每一行,如何让它返回行?

转载 作者:行者123 更新时间:2023-11-29 04:03:51 24 4
gpt4 key购买 nike

我有两个表需要链接在一起,我想统计名称表中类别的实例数

SELECT category.name, COUNT(name.category) as availability FROM
category LEFT JOIN name ON name.category = category.name
GROUP BY name.category

这很好,但我希望查询只计算现在尚未结束的名称。所以我添加了一个 WHERE条件时间 > now()

SELECT category.name, COUNT(name.category) as availability FROM
category LEFT JOIN name ON name.category = category.name WHERE
time > now()
GROUP BY name.category

到目前为止一切顺利,此查询仅返回时间距 future 较远的行。但它并没有从类别表中返回每个类别。此查询仅返回那些具有名称表中实例的类别,这些实例将时间设置得离 future 更远。

我想要的是从类别表中返回所有类别。如果类别在名称表中没有实例,我仍然希望它返回但可用性将为 0

最佳答案

如果时间是名称表中的一列,那么应该应用于左连接表的所有条件都必须在 ON 子句中完成。否则,WHERE 子句会将其转换回 INNER JOIN:

SELECT category.name, COUNT(name.category) as availability FROM
category LEFT JOIN name ON name.category = category.name AND
time > now()
GROUP BY category.name

基本上,WHERE 子句适用于从 FROM 子句(以及所有 JOIN)生成的整个(潜在)结果集。此结果集中的行必须满足 where 子句中的条件才能进行进一步处理。但是在 LEFT JOIN 的情况下,如果连接没有成功,该表中的列将全部为 NULL。因此,除非您的 WHERE 子句允许这些列为 NULL,否则它们将不会在查询中进一步处理。

关于mysql - 我的 Where 条件没有返回表中的每一行,如何让它返回行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483950/

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