Při použití EXCEPT PostgreSQL Pokud narazíte na chybu, která zní „CHYBA:každý dotaz KROMĚ dotazu 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 EXCEPT operátor.
Způsob, jak to opravit, 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
EXCEPT
SELECT StudentId, StudentName FROM Students; Výsledek:
ERROR: each EXCEPT 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
EXCEPT
SELECT StudentName FROM Students; Výsledek:
teachername ------------- Cathy Ben
Další možností je přidat příslušný sloupec do prvního SELECT prohlášení:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students; Výsledek:
teacherid | teachername
-----------+-------------
3 | Cathy
4 | Cathy
1 | Warren
5 | Bill
2 | Ben Jak ukazuje tento příklad, mohou být vráceny různé řádky v závislosti na tom, kterou volbu zvolíte.
Můžeme také použít EXCEPT ALL , který vrací duplicitní hodnoty:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentId, StudentName FROM Students; Výsledek:
teacherid | teachername
-----------+-------------
3 | Cathy
4 | Cathy
1 | Warren
5 | Bill
2 | Ben To může také vrátit stejné nebo různé výsledky v závislosti na datech.