Używając EXCEPT
PostgreSQLa operatora, jeśli napotkasz błąd o treści „BŁĄD:każde zapytanie Z WYJĄTKIEM musi mieć taką samą liczbę kolumn „, to dlatego, że występuje niezgodność w liczbie kolumn zwracanych przez zapytania po obu stronach EXCEPT
operator.
Sposobem na naprawienie tego jest upewnienie się, że obie opcje SELECT
oświadczenia zwracają tę samą liczbę kolumn.
Przykład błędu
Oto przykład kodu, który generuje błąd:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;
Wynik:
ERROR: each EXCEPT query must have the same number of columns LINE 3: SELECT StudentId, StudentName FROM Students;
Tutaj pierwszy SELECT
instrukcja zwraca jedną kolumnę (TeacherName
), ale drugi SELECT
instrukcja zwraca dwie kolumny (StudentId
i StudentName
).
Rozwiązanie
Rozwiązaniem jest zapewnienie obu opcji SELECT
oświadczenia zwracają tę samą liczbę kolumn
Korzystając z powyższego przykładu, możemy usunąć dodatkową kolumnę z naszego drugiego SELECT
oświadczenie:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Wynik:
teachername ------------- Cathy Ben
Inną opcją jest dodanie odpowiedniej kolumny do pierwszego SELECT
oświadczenie:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;
Wynik:
teacherid | teachername -----------+------------- 3 | Cathy 4 | Cathy 1 | Warren 5 | Bill 2 | Ben
Jak pokazuje ten przykład, w zależności od wybranej opcji mogą zostać zwrócone różne wiersze.
Możemy również użyć EXCEPT ALL
, który zwraca zduplikowane wartości:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentId, StudentName FROM Students;
Wynik:
teacherid | teachername -----------+------------- 3 | Cathy 4 | Cathy 1 | Warren 5 | Bill 2 | Ben
Może to również zwrócić te same lub różne wyniki, w zależności od danych.