首頁  >  文章  >  資料庫  >  如何解決 UNION 操作中的「錯誤:使用的 SELECT 語句具有不同的列數」?

如何解決 UNION 操作中的「錯誤:使用的 SELECT 語句具有不同的列數」?

Susan Sarandon
Susan Sarandon原創
2024-10-30 12:02:26189瀏覽

How to Resolve

錯誤:SELECT 語句中的列計數差異

執行涉及多個SELECT 語句的查詢(例如UNION 操作)時,必須執行此操作可確保每個語句包含完全相同的列數。如果不這樣做,將導致「錯誤:使用的 SELECT 語句具有不同的列數」錯誤。

要解決此問題,需要重寫查詢,使每個 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 < 1)
ORDER BY RAND()
LIMIT 6;

會出現此錯誤,因為第一個SELECT 包含4 列(“”,u1.,u2.*),而第二個SELECT 僅包含傳回單一欄位(「fid2」)。

保留預期功能的更直接的重寫是:

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;

透過確保兩個SELECT 語句傳回相同數量的符合列資料類型,可以執行查詢而不會遇到列計數錯誤。此外,它消除了不必要的外部聯接,根據提供的模式,這些外部聯結似乎是多餘的。

以上是如何解決 UNION 操作中的「錯誤:使用的 SELECT 語句具有不同的列數」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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