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 | +-----------+-------------+