【发布时间】:2018-04-27 05:22:10
【问题描述】:
当使用子查询查询 COUNT 时,我们发现 H2 的奇怪行为。
准备表格:
CREATE TABLE Foo
(
id INT PRIMARY KEY AUTO_INCREMENT,
fieldName VARCHAR(30) NOT NULL,
);
测试简单查询(工作正常):
SELECT F1.id, F2.id from Foo as F1 INNER JOIN Foo F2 on F1.id = F2.id
用 count 测试相同的查询:
SELECT count(*) FROM (
SELECT F1.id, F2.id from Foo as F1 INNER JOIN Foo F2 on F1.id = F2.id
) q;
出现以下错误:
[42S21][42121] 列名“ID”重复; SQL 语句: 选择计数(*) FROM (
有什么解决方法吗?
更新: 问题在于在准备子查询列名时删除了原始表名,实际上我有:
SELECT count(*) FROM (
SELECT id, id from q
);
添加别名(如Abdul Rasheed 所述)可解决问题。
【问题讨论】:
-
两列 F1.id, F2.id 都有名字是 id,所以你要使用别名。例如选择 F1.id 作为 id1,F2.id 作为 id2 ...
-
这种连接没有意义。