我有两个表,第一个表引用了第二个表中的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');
暂无答案!
目前还没有任何答案,快来回答吧!