首頁 >資料庫 >mysql教程 >如何修復 MySQL UNION 操作中的「錯誤 1222 (21000):使用的 SELECT 語句具有不同的列數」?

如何修復 MySQL UNION 操作中的「錯誤 1222 (21000):使用的 SELECT 語句具有不同的列數」?

Barbara Streisand
Barbara Streisand原創
2024-10-29 01:41:30255瀏覽

How to Fix

錯誤: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn