sql >> Databáze >  >> RDS >> PostgreSQL

Oprava „CHYBA:  každý dotaz UNION musí mít stejný počet sloupců“ v PostgreSQL

Při použití UNION operátor v PostgreSQL, pokud narazíte na chybu, která zní „ERROR:každý dotaz UNION musí mít stejný počet sloupců “, je to proto, že existuje nesoulad v počtu sloupců vrácených dotazy na obou stranách UNION operátor.

K této chybě dochází při počtu sloupců vrácených každým SELECT prohlášení je jiné.

Způsob, jak to vyřešit, je zajistit, aby obě SELECT příkazy vrátí stejný počet sloupců.

Příklad chyby

Zde je příklad kódu, který způsobuje chybu:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Výsledek:

ERROR:  each UNION query must have the same number of columns
LINE 3: SELECT StudentId, StudentName FROM Students;

Zde je první SELECT příkaz vrátí jeden sloupec (TeacherName ), ale druhý SELECT příkaz vrátí dva sloupce (StudentId a StudentName ).

Řešení

Řešením je zajistit jak SELECT příkazy vrátí stejný počet sloupců

Pomocí výše uvedeného příkladu můžeme buď odstranit nadbytečný sloupec z našeho druhého SELECT prohlášení:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Nebo můžeme přidat další sloupec do prvního SELECT prohlášení:

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Je důležité si uvědomit, že můžete získat různé výsledky v závislosti na tom, kterou možnost zvolíte. Důvodem je UNION ve výchozím nastavení vrací odlišné řádky. Když přidáme další sloupec, existuje možnost, že z dříve duplicitního řádku se nyní stane jedinečný řádek v závislosti na hodnotě ve sloupci navíc.

Můžeme také použít UNION ALL , který vrací duplicitní hodnoty:

SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;

To může také vrátit jiné výsledky do jiných příkladů.


  1. Existuje způsob, jak získat přístup k hodnotě předchozího řádku v příkazu SELECT?

  2. SQL Server Transakční replikace interní

  3. Rozdělení řetězce na serveru SQL

  4. @@DATEFIRST – Získejte první den v týdnu na serveru SQL