gpt4 book ai didi

mysql - LEFT JOIN 返回所有带有 NULL 的内容

转载 作者:行者123 更新时间:2023-11-29 19:45:49 24 4
gpt4 key购买 nike

我有两个表,我通过左连接加入它们。两张 table 都是空的。但是当我运行查询时,mysql 返回一行全部为 NULL。

我尝试过几个查询,例如

SELECT products.*,SUM(pq_quantity) as quantity
FROM `products` LEFT JOIN `products_quantities` ON `pq_product_idFk` = `p_id`
WHERE `p_volusion_id` = '37808'

或者

SELECT products.*,SUM(pq_quantity) as quantity
FROM `products` LEFT JOIN `products_quantities` ON `pq_product_idFk` = `p_id`
WHERE `p_volusion_id` = '37808' AND p_id IS NOT NULL

或者

SELECT products.*,SUM(pq_quantity) as quantity
FROM `products` LEFT JOIN `products_quantities` ON `pq_product_idFk` = `p_id` AND `p_volusion_id` = '37808' AND p_id IS NOT NULL

上述查询似乎都不起作用,因为我只想要不为 NULL 的结果。

谢谢

最佳答案

Both the tables are empty. But when I run the query, mysql returns a row with all NULLS.

GROUP BY aggregate functions的存在在 SELECT 子句中要求 GROUP BY 子句也存在。但是,如果不存在,SQL 标准将指定使用由 WHERE 子句筛选的所有行来创建单个组。

由于 SELECT 子句中使用了 *,因此您发布的所有查询都是无效 SQL。

包含 GROUP BY 子句的查询不会从表中返回行。它使用从表中提取的值创建行。首先,它使用 GROUP BY 子句中的表达式创建组(和子组)。对于 GROUP BY 子句中指定的第一个表达式,组中的所有行都具有相同的值。

如果GROUP BY子句中有两个或多个表达式,则使用第二个表达式将每个组拆分为子组,然后使用每个子组进一步拆分为子子组第三个表达式(如果存在)等等。

从每个这样的行组(最后一次分割之后),数据库引擎生成一个新行并将其放入结果集中。如果查询在 SELECT 子句中包含的表达式既不是 GRUP BY 聚合函数的参数,也不是出现在 GROUP BY 子句中,则,最有可能的是,这些表达式在一个子组中将具有多个值。这就是为什么查询是无效的SQL。到5.7.5版本,MySQL接受此类无效查询,但保留返回any value it wants的权利。 (来自小组)针对有问题的表达方式。

回到您的问题,如上所述,即使没有 GROUP BY 子句,您的查询也会被处理,因为它有一个,并且从由 过滤的所有行创建一个组WHERE 子句。

它是一个空组,但这不会阻止数据库引擎从中生成行。由于没有可用于计算 SUM(pG_quantity) 的值,因此 NULL 是它在结果集的列中返回的逻辑值。

NULL 是一个特殊值,表示不存在任何值或未知值。这对你的情况来说非常有意义。表中没有任何值,因此无法计算 SUM(pq_quantity)。它的值不可用(即 NULL)。

关于mysql - LEFT JOIN 返回所有带有 NULL 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40992086/

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