Consulta SQL Sintaxis: El uso de alias de tabla en un recuento no es válido? ¿Por qué?

StackOverflow https://stackoverflow.com/questions/2906017

Pregunta

Podría alguien por favor me explique por qué la siguiente consulta no es válida? Estoy corriendo esta consulta contra la base de datos Oracle 10g.

select count(test.*) from my_table test;

Me sale el siguiente error: ORA-01747: user.table.column inválida, table.column o especificación de columna

sin embargo , las dos consultas siguientes son válidos.

select count(test.column) from my_table test;

select test.* from my_table test;
¿Fue útil?

Solución

COUNT(expression) contará todas las filas en expression no es nulo. COUNT(*) es una excepción, devuelve el número de filas:. * no es un alias para my_table.*

Otros consejos

Por lo que yo sé, Count(Table.*) no está soportado oficialmente en la especificación SQL. Sólo Count(*) (contar todas las filas devueltas) y Count(Table.ColumnName) (cuenta todos los valores no nulos en la columna dada). Por lo tanto, incluso si el DBMS apoyaron, yo recomendaría contra el uso de it.`

Esta sintaxis sólo funciona en PostgreSQL y sólo porque tiene un tipo de datos de registro (para los que test.* es una expresión significativa).

Sólo tiene que utilizar COUNT(*).

Esta consulta:

select count(test.column) from my_table test;

le devolverá el número de registros para los que no es test.column NULL.

Esta consulta:

select test.* from my_table test;

sólo le devolverá todos los registros de my_table.

COUNT como tal, es probablemente el único agregado que tiene sentido sin parámetros, y el uso de una expresión como COUNT(*) es sólo una manera de llamar a una función sin proporcionar parámetros reales a la misma.

probablemente desearía encontrar el número de registros en los que test.column no es nulo si se está haciendo una combinación externa. Como cada tabla debe tener un PK (que no es nulo) que debe ser capaz de contar las filas de esa manera si se quiere:

select count(y.pk)
from x
left outer join y on y.pk = x.ck

COUNT (*) no es bueno aquí porque la combinación externa es la creación de una fila nula para la tabla que es deficiente en la información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top