mysql - SQL - Left Join 和 Group By 导致第二个表中的行数据混淆
问题描述
我有两个表,第一个表引用了第二个表中的 id,我想进行一个查询,该查询涉及左连接与第二个表中的字段以及选择中的 COUNT 函数,因为 COUNT函数,我使用的是 GROUP BY 子句。
所以我的查询看起来像:
SELECT t1.id, t1.txt, t2.id, t2.txt, COUNT(t2.id)
FROM test_data1 t1
LEFT JOIN test_data2 t2 ON (t1.ref_col = t2.id)
GROUP BY t1.id
在我的表中,只有 test_data1 的第二行在 ref_col 中有一个条目,所以我希望对于结果中的第一行,t2.id 的值为 NULL,但事实并非如此(在我的示例中,我看到值 2,但我不确定这里是否可能存在随机元素)。
如果我使用
SELECT MAX(t1.id), MAX(t1.txt), MAX(t2.id), MAX(t2.txt), COUNT(t2.id)
FROM test_data1 t1
LEFT JOIN test_data2 t2 ON (t1.ref_col = t2.id)
GROUP BY t1.id
我得到了我的预期结果,但是我很惊讶这是必要的,因为 test_data2 中最多只有一个条目与 test_data1 中的 ref_col 匹配。
有谁知道为什么 LEFT JOIN + GROUP BY 会这样?这是在 Linux 上使用 MySQL 版本 8。
如果你想在这里重现这个是表定义:
CREATE TABLE test_data1 (id int unsigned NOT NULL AUTO_INCREMENT,
txt VARCHAR(45) DEFAULT NULL,
ref_col int unsigned DEFAULT NULL, PRIMARY KEY (id));
CREATE TABLE test_data1 (id int unsigned NOT NULL AUTO_INCREMENT,
txt VARCHAR(45) DEFAULT NULL,
ref_col int unsigned DEFAULT NULL, PRIMARY KEY (id));
INSERT INTO test_data1 (id, txt, ref_col)
VALUES
(1,'zz',NULL),
(2,'yy',2),
(3,'xx',NULL);
INSERT INTO test_data2 (id, txt)
VALUES
(1,'aa'),
(2,'bb'),
(3,'cc'),
(4,'dd');
解决方案
推荐阅读
- linux - 如何在 Linux 上手动在虚幻中生成 `.generated.h` 文件?
- java - 无法导入 JFrame 或 Dimension
- vba - 使用 chromedriver 优化 vba
- python - 如何匹配两个 numpy ndArray 之间的索引并对它们进行排序?
- r - 将函数应用于 R 列表中的特定列
- regex - Invoice2data 如何使用多行
- c# - WPF DragMove 动作仅在有背景时有效
- spring-boot - Spring Boot OpenAPI 3 - 如何传递分页详细信息?
- python - 如何使用numpy arange函数,如range函数
- java - 如何用多行替换 PDF 中的文本?