Domanda

Qualcuno potrebbe spiegare a me il motivo per cui la seguente query non è valido? Io corro questa query di database Oracle 10g.

select count(test.*) from my_table test;

ottengo il seguente errore: ORA-01747: user.table.column non valida, table.column, o una specifica colonna

ma , i seguenti due query sono validi.

select count(test.column) from my_table test;

select test.* from my_table test;
È stato utile?

Soluzione

COUNT(expression) conteranno tutte le righe dove expression non è nullo. COUNT(*) è un'eccezione, restituisce il numero di righe:. * non è un alias per my_table.*

Altri suggerimenti

Per quanto ne so, Count(Table.*) non è ufficialmente supportata nella specifica SQL. Solo Count(*) (contare tutte le righe restituite) e Count(Table.ColumnName) (contare tutti i valori non nulli nella colonna data). Quindi, anche se il DBMS supportati esso, mi sento di raccomandare di non utilizzare it.`

Questa sintassi funziona solo in PostgreSQL e solo perché ha un tipo di dati di registrazione (per il quale test.* è un'espressione significativa).

Basta usare COUNT(*).

Questa query:

select count(test.column) from my_table test;

restituirà il numero di record per i quali non è test.column NULL.

Questa query:

select test.* from my_table test;

sarà solo ti restituirà tutti i record da my_table.

COUNT come tale è probabilmente l'unico aggregato che ha senso senza parametri, e usando un'espressione come COUNT(*) è solo un modo per chiamare una funzione senza fornire parametri attuali ad esso.

Si può voler trovare il numero di record in cui test.column non è nullo, se si sta facendo un outer join. Come ogni tavolo dovrebbe avere una PK (che non è nullo) si dovrebbe essere in grado di contare le righe del genere, se si desidera:

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

COUNT (*) non va bene qui perché il join esterno sta creando una riga nullo per la tabella che è carente nelle informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top