SQL Query Syntax: Verwenden von Tabellenalias in einer Zählung ungültig ist? Warum?
Frage
Könnte jemand mir bitte erklären, warum die folgende Abfrage ungültig ist? Ich bin mit dieser Abfrage eines Oracle 10g-Datenbank.
select count(test.*) from my_table test;
Ich erhalte die folgende Fehlermeldung: ORA-01747: invalid user.table.column, table.column oder Spaltenangabe
aber , die folgenden zwei Abfragen gültig sind.
select count(test.column) from my_table test;
select test.* from my_table test;
Lösung
COUNT(expression)
zählt alle Zeilen, in denen expression
nicht null ist. COUNT(*)
ist eine Ausnahme, sie die Anzahl der Zeilen zurückgibt. *
ist kein Alias ??für my_table.*
Andere Tipps
Soweit ich weiß, ist Count(Table.*)
nicht offiziell in der SQL-Spezifikation unterstützt. Nur Count(*)
(zählen alle Zeilen zurückgegeben) und Count(Table.ColumnName)
(zählen alle Nicht-Null-Werte in der angegebenen Spalte). Also, auch wenn das DBMS es unterstützt, würde ich empfehlen, gegen die Verwendung von it.`
Diese Syntax funktioniert nur in PostgreSQL
und nur weil es einen Datensatz-Datentyp hat (für die test.*
ist ein sinnvoller Ausdruck).
Just Verwendung COUNT(*)
.
Diese Abfrage:
select count(test.column) from my_table test;
kehren Sie die Anzahl der Datensätze, für die test.column
nicht NULL
ist.
Diese Abfrage:
select test.* from my_table test;
werden Sie nur zurückgeben alle Datensätze aus my_table
.
COUNT
als solche ist wahrscheinlich das einzige Aggregat, das Gefühl ohne Parameter macht, und einen Ausdruck wie COUNT(*)
Verwendung ist nur eine Möglichkeit, eine Funktion aufzurufen, ohne dass tatsächliche Parameter zur Datei angeben.
Sie vernünftigerweise wollen die Anzahl der Datensätze zu finden, wo test.column nicht NULL ist, wenn Sie eine äußere Verknüpfung tun. Da jeder Tisch eine PK haben sollte (was nicht null ist), sollten Sie die Zeilen wie das verlassen kann, wenn Sie wollen:
select count(y.pk)
from x
left outer join y on y.pk = x.ck
COUNT (*) ist nicht gut hier, weil die äußere Verknüpfung ist eine Null-Zeile für die Tabelle erstellen, die in der Informationsmangelhaft ist.