錯誤:SELECT 語句中的列計數不一致
在MySQL 中,UNION 和UNION ALL 操作語句要求參與的SELECT 語句擁有相同的列數SELECT 子句中的列數。此外,每個位置的列的資料類型必須對應。
提供的查詢違反了此規則:
<code class="sql">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 < 1) ORDER BY RAND() LIMIT 6;
第一個SELECT 語句傳回「friends」和「 users」表,而第二個SELECT 語句只傳回「friends」表中的“fid2”列。列計數的這種差異會導致以下錯誤訊息:
<code class="error">ERROR 1222 (21000): The used SELECT statements have a different number of columns from the following:
要解決該錯誤,請確保 UNION 操作中的所有 SELECT 語句具有相同的列數。實現此目的的最簡單方法是在每個SELECT 語句中使用明確列清單:
<code class="sql">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 < 1 ORDER BY RAND() LIMIT 6;</code>
透過在每個SELECT 語句中明確指定列,MySQL 可以確保列數和資料類型匹配,從而允許UNION 操作可以無錯誤地繼續進行。
以上是如何修復 MySQL UNION 操作中的「錯誤 1222 (21000):使用的 SELECT 語句具有不同的列數」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!