2016-04-24 149 views
-5

此查詢有什麼問題?SQL SELECT語句 - 列數不同

sql error: #1222 - The used SELECT statements have a different number of columns 
SELECT `id`,`firstname`,`lastname` FROM `users` WHERE `firstname` LIKE 
'%ned%' OR `lastname` LIKE '%ned%' 
OR CONCAT(`firstname`," ", `lastname`) LIKE '%ned%' 
OR CONCAT(`lastname`," ", `firstname`) LIKE '%ned%' 
UNION SELECT `users`.`id` FROM `users` LEFT JOIN `friends` ON `users`.`id`=`friends`.`user_id` 

用戶表

+------------------------------------------+ 
| id | firstname | lastname | .... | 
| 1 | Nedim | Kanat | .... | 
+------------------------------------------+ 

朋友表

+-------------------------------------------+ 
| id | user_id | friend_id | .... | 
| 1 | 1  | 2  | .... | 
+-------------------------------------------+ 
+2

我不知道。問題是什麼? –

+0

#1222 - 使用的SELECT語句具有不同數量的列 –

+0

@IdontReallywolf第二個select語句只有一列。 –

回答

1

聯合是組之間的數學運算。 這種操作要求兩個表是COMPATIBLE,這意味着它們必須在數量和類型上具有相同的列。 顯而易見,你試圖在3列SELECT和1列SELECT語句之間建立一個聯合(LEFT JOIN不會像你期望的那樣添加其他2列,因爲在建立聯接之後SELECT項目已經建立)

1

你不應該使用UNION這一點。您應該使用的查詢是這樣的:

SELECT `id`,`firstname`,`lastname`, (
    SELECT `users`.`id` FROM `users` LEFT JOIN `friends` ON `users`.`id`=`friends`.`user_id` 
) AS `UserID` FROM `users` WHERE `firstname` LIKE 
'%ned%' OR `lastname` LIKE '%ned%' 
OR CONCAT(`firstname`," ", `lastname`) LIKE '%ned%' 
OR CONCAT(`lastname`," ", `firstname`) LIKE '%ned%' 

差異

  • UNION是添加一個新行。
  • ,() AS Column用於添加爲同一行中的另一列。
+0

當然,在您的OP中進行解釋。這個問題。您可以選擇編輯。我們可以等。回覆郵件。 –

+0

在這裏你去我的朋友:http://pastebin.com/ivNN8abU –

+0

看起來你使用的是一個「錯誤的」模式爲朋友表。你有沒有聽說過關係表和六度關係? –