Pokud se vám při pokusu o použití UNION zobrazuje „Chyba:připravuje se, SELECTy nalevo a napravo od UNION nemají stejný počet sloupců výsledků…“ operátor v SQLite, je to proto, že jeden z SELECT příkazy vrací více sloupců než ostatní.
Když použijete UNION operátor, oba SELECT příkazy musí vrátit stejný počet sloupců.
Chcete-li tento problém vyřešit, zkontrolujte SELECT příkazy vrátí stejný počet sloupců.
Příklad chyby
Zde je příklad kódu SQL, který způsobuje chybu:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; Výsledek:
Chyba:v přípravě nemají SELECT vlevo a vpravo od UNION stejný počet sloupců výsledků (1)
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:
Jméno učitele-----------Ben Bill Cathy Ein Faye Jet Spike Warren
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:
Id učitele Jméno učitele--------- -----------1 Faye 1 Warren 2 Ben 2 Jet 3 Cathy 3 Spike 4 Cathy 4 Ein 5 Bill 5 Warren 6 Bill
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:
Id učitele Jméno učitele--------- -----------1 Warren 2 Ben 3 Cathy 4 Cathy 5 Bill 6 Bill 1 Faye 2 Jet 3 Spike 4 Ein 5 Warren 6 Bill