2013-08-26 89 views
1

在公司的系統上開發時,我遇到了一個兩難的問題,而且項目管理不是關於!無法聯合選擇並加入聯盟

SELECT clients_owner.Name, clients_owner.`number`, clients_shops.Shopname, clients_shops.PostCode, clients_shops.Location 
FROM clients_shops inner join clients_owner ON 
clients_owner.ShopID = clients_shops.ShopID 
UNION 
SELECT clients_fans.Fan 
FROM clients_shops inner join clients_fans ON 
clients_shops.ShopID = clients_fans.ShopID 

下面的查詢返回以下錯誤:

1222 - The used SELECT statements have a different number of columns

但是使用這個作爲一個例子:Mysql JOIN (multiple) tables被標記爲答案,這樣的查詢是明顯有效。我哪裏錯了?

而下面的加入合併兩個表:

SELECT 
    clients_owner.Name, clients_owner.Number, clients_shops.Shopname, clients_shops.PostCode, 
    clients_shops.Location FROM clients_shops INNER JOIN clients_owner on 
    clients_owner.ShopID = clients_shops.ShopID 

工程順利

+0

'UNION'合併行,所以他們必須要對兩個查詢相同。看起來你正試圖向現有記錄添加另一列。這應該使用'JOIN'完成。 – MarcinJuraszek

回答

2

要使用UNION您必須:

  1. 兩個請求的相同數量的列。

  2. 每個SELECT語句的相應位置中的列應具有相同的數據類型。

你必須在1日要求5列:

clients_owner.Name, 
clients_owner.`number`, 
clients_shops.Shopname, 
clients_shops.PostCode, 
clients_shops.Location 

和1列中的2次請求:

clients_fans.Fan 

http://dev.mysql.com/doc/refman/5.0/en/union.html

1

如果你是使用UNION select語句中的列數應該相等。

聯盟內的每個SELECT語句必須有相同的列數

2

聯盟意味着你的,你alreday有現有列下添加相同的列。在你的情況下,你在第一個查詢中有5列,第二個中有1個:

|1|2|3|4|5 
|1| 

不匹配。

你需要的是另一種加入:

SELECT clients_owner.name, 
     clients_owner.`number`, 
     clients_shops.shopname, 
     clients_shops.postcode, 
     clients_shops.location, 
     clients_fans.fan 
FROM clients_shops 
     INNER JOIN clients_owner 
       ON clients_owner.shopid = clients_shops.shopid 
     LEFT JOIN clients_fans 
       ON clients_fans.shopid = clients_shops.shopid 
+0

所以在將來..如果我想組另一個表到我的查詢,我會遵循相同的路線,但什麼聯接類型?我最終希望創建一個包含5個表格的視圖 –

+0

@SophieMackeral: - 您可以使用任何聯接,但是您必須確保如果您正在使用UNION,那麼** UNION中的每個SELECT語句必須具有相同數量的列** –

+0

您可以根據需要連接儘可能多的表格。 如果你在clients_fans表中有更多的粉絲,你也可以做一個正確的連接,這會給你所有粉絲的所有粉絲(你可以通過這些查詢獲得很多行),並且你可以將它們連接到一個表你有更多的信息給這些粉絲等...... –