Ако получавате „Грешка:при подготовката, SELECTs отляво и отдясно на UNION нямат същия брой колони с резултати...“, когато се опитвате да използвате UNION
оператор в SQLite, това е защото един от SELECT
инструкциите връщат повече колони от другите.
Когато използвате UNION
оператор, и двата SELECT
операторите трябва да връщат същия брой колони.
За да коригирате този проблем, уверете се, че SELECT
операторите връщат същия брой колони.
Пример за грешка
Ето пример за SQL код, който произвежда грешката:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Резултат:
Грешка:при подготовката, SELECT вляво и вдясно от UNION нямат същия брой колони с резултати (1)
Тук първият SELECT
оператор връща една колона (TeacherName
), но вторият SELECT
оператор връща две колони (StudentId
и StudentName
).
Решение
Начинът да коригирате този проблем е да гарантирате и двете SELECT
операторите връщат същия брой колони
Така че, използвайки горния пример, можем да премахнем допълнителната колона от нашия втори SELECT
изявление:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Резултат:
Име на учителя-----------Бен Бил Кати Ейн Фей Джет Спайк Уорън
Или можем да добавим друга колона към първия SELECT
изявление:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Резултат:
TeacherId TeacherName--------------- -----------1 Фей 1 Уорън 2 Бен 2 Джет 3 Кати 3 Спайк 4 Кати 4 Ейн 5 Бил 5 Уорън 6 Бил
Имайте предвид, че можете да получите различни резултати в зависимост от това коя опция изберете. Това е така, защото UNION
връща различни редове по подразбиране. Когато добавим друга колона, има възможност един по-рано дублиран ред да стане уникален ред, в зависимост от стойността в допълнителната колона.
Можем също да използваме UNION ALL
, който връща дублиращи се стойности:
SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;
Резултат:
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 предварително>