有人可以向我解释为什么以下查询无效?我正在使用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

计数(*)在这里不好,因为外部联接正在为表中的表格创建一个空行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top