Używając INTERSECT PostgreSQLa operatora, jeśli napotkasz błąd o treści „BŁĄD:każde zapytanie INTERSECT musi mieć taką samą liczbę kolumn „, to dlatego, że występuje niezgodność w liczbie kolumn zwracanych przez zapytania po obu stronach INTERSECT 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
INTERSECT
SELECT StudentId, StudentName FROM Students; Wynik:
ERROR: each INTERSECT 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
INTERSECT
SELECT StudentName FROM Students; Wynik:
teachername ------------- Bill Warren
Inną opcją jest dodanie odpowiedniej kolumny do pierwszego SELECT oświadczenie:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students; Wynik:
teacherid | teachername
-----------+-------------
6 | Bill Jak pokazuje ten przykład, różne wiersze mogą zostać zwrócone w zależności od wybranej opcji.
Możemy również użyć INTERSECT ALL , który zawiera zduplikowane wartości:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT ALL
SELECT StudentId, StudentName FROM Students; Wynik:
teacherid | teachername
-----------+-------------
6 | Bill Może to również zwrócić te same lub różne wyniki, w zależności od danych.