執行使用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 錯誤訊息表示由 UNION 連接的兩個 SELECT 語句之間的列計數存在差異。具體來說,第一個 SELECT 語句傳回所涉及表中的所有列,而第二個 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