sql >> Databáze >  >> RDS >> Mysql

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

Pokud se vám při použití UNION zobrazuje „ERROR 1222 (21000):Použité příkazy SELECT mají jiný počet sloupců“ klauzule v dotazu MySQL, je to pravděpodobně proto, že počet sloupců vrácených každým SELECT prohlášení je jiné.

Například první SELECT příkaz může vrátit dva sloupce, ale druhý SELECT příkaz vrátí tři.

Chcete-li tento problém vyřešit, ujistěte se, že 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í

Způsob, jak tento problém vyřešit, je zajistit obě možnosti 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;

Výsledek:

+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+

Nebo můžeme přidat další sloupec do prvního SELECT prohlášení:

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

Výsledek:

+-----------+-------------+
| TeacherId | TeacherName |
+-----------+-------------+
|         1 | Warren      |
|         2 | Ben         |
|         3 | Cathy       |
|         4 | Cathy       |
|         5 | Bill        |
|         6 | Bill        |
|         1 | Faye        |
|         2 | Jet         |
|         3 | Spike       |
|         4 | Ein         |
|         5 | Warren      |
+-----------+-------------+

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;

Výsledek:

+-----------+-------------+
| TeacherId | TeacherName |
+-----------+-------------+
|         1 | Warren      |
|         2 | Ben         |
|         3 | Cathy       |
|         4 | Cathy       |
|         5 | Bill        |
|         6 | Bill        |
|         1 | Faye        |
|         2 | Jet         |
|         3 | Spike       |
|         4 | Ein         |
|         5 | Warren      |
|         6 | Bill        |
+-----------+-------------+

  1. Jak převést malá písmena na velká v SQL Server – UPPER()

  2. Převeďte uniklý znak Unicode zpět na skutečný znak v PostgreSQL

  3. Připojení k MySQL nefunguje:2002 Žádný takový soubor nebo adresář

  4. Použití klauzule IN s řetězcem odděleným čárkou z výstupu funkce replace() v Oracle SQL