錯誤: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遇到此錯誤,因為第一個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透過確保兩個 SELECT 語句傳回相同數量且資料類型相符的資料列,可以執行查詢而不會遇到列計數錯誤。此外,它消除了不必要的外部聯接,根據提供的模式,這些外部聯結似乎是多餘的。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3