sql-left-join和group-by导致第二个表中的行数据混淆

inkz8wg9  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(246)

我有两个表,第一个表引用了第二个表中的id,我想用第二个表中的字段和select中的count函数进行一个包含左连接的查询,因为有count函数,所以我使用了groupby子句。
所以我的查询看起来像:

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\u data1的第二行在ref\u 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\u data2中最多只有一个条目与test\u data1中的ref\u 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');

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题