«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как устранить ошибку «Разное количество столбцов в операторах выбора» при использовании UNION?

Как устранить ошибку «Разное количество столбцов в операторах выбора» при использовании UNION?

Опубликовано 7 ноября 2024 г.
Просматривать:364

How to Resolve the \

Ошибка: разное количество столбцов в операторах выбора.

При выполнении запроса, использующего оператор UNION, необходимо убедиться, что все отдельные задействованные операторы SELECT соответствуют два фундаментальных критерия:

  1. Количество соответствующих столбцов: Каждый оператор SELECT должен давать одинаковое количество столбцов в полученном наборе результатов.
  2. Согласованные данные Типы: Типы данных соответствующих столбцов в разных операторах SELECT должны совпадать.

Анализ проблемы

С учетом предоставленного запроса:

SELECT * FROM friends
LEFT JOIN users AS u1 ON users.uid = friends.fid1
LEFT JOIN users AS u2 ON users.uid = friends.fid2
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1 

сообщение об ошибке указывает на несоответствие количества столбцов между двумя операторами SELECT, соединенными UNION. В частности, первый оператор SELECT возвращает все столбцы из задействованных таблиц, а второй извлекает только столбец fid2.

Решение

Чтобы решить эту проблему, второй оператор SELECT следует изменить на соответствует количеству столбцов первого оператора. Самый простой подход — явно включить все нужные столбцы:

   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid2
    WHERE f.fid1 = 1 
      AND f.fid2 > 1
UNION 
   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid1
    WHERE f.fid2  = 1 
      AND f.fid1 

В качестве альтернативы можно использовать оператор UNION ALL, который позволяет использовать инструкции SELECT с различным количеством столбцов. Однако несовпадающие столбцы будут заполнены значениями NULL, что может быть нежелательно во всех случаях.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3