sql >> Databáze >  >> RDS >> MariaDB

Oprava „ERROR 1222 (21000):Použité příkazy SELECT mají jiný počet sloupců“ při použití UNION v MariaDB

Při použití UNION operátora v MariaDB, můžete narazit na následující chybu:„CHYBA 1222 (21000):Použité příkazy SELECT mají jiný počet sloupců“.

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 1222 (21000): The used SELECT statements have a different number of columns

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ů

Takže 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;

Mějte na paměti, ž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 by také mohlo vrátit jiné výsledky k jiným příkladům.


  1. Profilování dotazů šetrné k šířce pásma pro Azure SQL Database

  2. Zaznamenejte změny záznamu na serveru SQL do auditní tabulky

  3. Vytvoření první offline aplikace pomocí Node.js a SQLite

  4. Proč jsem obdržel tuto výjimku SQLSyntaxError:ORA-00933:Příkaz SQL nebyl správně ukončen, když se pokouším provést tento dotaz JDBC?