gpt4 book ai didi

mysql - 查询中缺少值

转载 作者:行者123 更新时间:2023-11-28 23:34:04 24 4
gpt4 key购买 nike

我在以下查询中遇到了一些奇怪的结果:

SET @indi_id = 768;
SET @generations = 8;

SELECT num, sosa, seq, len, dernier, ful_ful_nom
FROM fullindi
LEFT JOIN lignee_new
ON ((ful_indi_id = dernier) AND (len BETWEEN 1 AND @generations))
RIGHT JOIN numbers
ON ((sosa = num) AND (premier = @indi_id))
WHERE num BETWEEN 1 AND pow(2, @generations)
GROUP BY num
ORDER BY num;

结果是这样的:

enter image description here

为什么在一个完整的 NULL 之前的行不显示现有值 'sosa'、'len'、'dernier'、ful_ful_nom')而只显示 'seq' 值(参见行 4347 在这个例子中)?

我错过了什么?

根据要求,这里是数据:

表 lignee_new :

enter image description here

表格满印:

enter image description here

最佳答案

问题在于,当引入聚合函数或包含 GROUP BY 时,MySQL 确实做了一些愚蠢的事情,但并非所有字段都在聚合函数或您的 GROUP 中通过

您要求它 GROUP BY numSELECT 中的其他列均未包含在 Group BY 中,也未使用函数聚合(SUM , MAX, MIN, AVG, 等..)

在任何其他 RDBMS 中,此查询不会运行并会抛出错误,但 MySQL 会继续执行。它使用逻辑来决定它应该为每个不是 num 的字段显示哪个值,只需捕获它在它的数据存储中找到的第一个值,这在 innoDB 和人们使用的任何其他东西之间可能不同.

我的猜测是,在您的情况下,您在 lgnee_new 中有多个记录,其 num 为 43。由于您 GROUP BY num 仅此而已,它只是从 num=43 的多个记录中随机获取值并显示它们……这是合理的。通过不将它们包含在聚合函数中,您几乎是在说“我不在乎您为这些其他字段显示什么,只要带回一些东西”,MySQL 就是这样做的。

完全删除 GROUP BY 子句,您将看到有意义的数据。或许使用 WHERE 进一步过滤您的记录以去除空值或其他您不需要的东西(不要使用 GROUP BY 来过滤)。

关于mysql - 查询中缺少值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36334618/

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