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;
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top