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

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

Při použití INTERSECT PostgreSQL Pokud narazíte na chybu, která zní „ERROR:každý dotaz INTERSECT 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 INTERSECT operátor.

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
INTERSECT
SELECT StudentId, StudentName FROM Students;

Výsledek:

ERROR:  each INTERSECT 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
INTERSECT
SELECT StudentName FROM Students;

Výsledek:

 teachername 
-------------
 Bill
 Warren

Další možností je přidat příslušný sloupec do prvního SELECT prohlášení:

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

Výsledek:

 teacherid | teachername 
-----------+-------------
         6 | Bill

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 INTERSECT ALL , který obsahuje duplicitní hodnoty:

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

Výsledek:

 teacherid | teachername 
-----------+-------------
         6 | Bill

To může také vrátit stejné nebo různé výsledky v závislosti na datech.


  1. Funkce REGEXP_REPLACE() v Oracle

  2. Rozdělit sloupec do více řádků v Postgresu

  3. Jak vypsat databáze a tabulky v PostgreSQL

  4. Význam délky varchar v tabulce MySQL