При выполнении запроса, использующего оператор UNION, необходимо убедиться, что все отдельные задействованные операторы 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