SQL查询语法:计数中使用表别名无效?为什么?
题
有人可以向我解释为什么以下查询无效?我正在使用Oracle 10G数据库运行此查询。
select count(test.*) from my_table test;
我收到以下错误:ORA-01747:无效的user.table.column,table.column或列规范
然而, ,以下两个查询是有效的。
select count(test.column) from my_table test;
select test.* from my_table test;
解决方案
COUNT(expression)
将计算所有行 expression
不是零。 COUNT(*)
是例外,它返回行数: *
不是别名 my_table.*
.
其他提示
据我所知, Count(Table.*)
在SQL规范中不正式支持。仅有的 Count(*)
(计数所有返回的行)和 Count(Table.ColumnName)
(计数给定列中的所有非零值)。因此,即使DBMS支持了它,我也建议不要使用它。
该语法仅在 PostgreSQL
只是因为它具有记录数据类型(其中 test.*
是一个有意义的表达)。
只是使用 COUNT(*)
.
此查询:
select count(test.column) from my_table test;
将返回您的记录数量 test.column
不是 NULL
.
此查询:
select test.* from my_table test;
只会从中返回您所有的记录 my_table
.
COUNT
因此,这可能是唯一没有参数的骨料,并使用类似的表达式 COUNT(*)
只是调用函数的一种方法,而无需提供任何实际参数。
您可能需要合理地找到测试的记录数量。由于每个表都有一个PK(不是null),如果需要,您应该能够计算这样的行:
select count(y.pk)
from x
left outer join y on y.pk = x.ck
计数(*)在这里不好,因为外部联接正在为表中的表格创建一个空行。
不隶属于 StackOverflow