2012-02-26 83 views
0

我有一個mysql連接,並由於某些原因它的圖像和名字和姓氏返回重複字段。喜歡它沒有加入正確的。MySQL左加入,將無法工作

這裏是SQL

SELECT a.follow_id, a.user_id, a.following, b.firstname, b.lastname, c.firstname, c.lastname, b.image, c.image 
FROM followers a 
LEFT JOIN candidates b ON a.following = b.user_id 
LEFT JOIN donors c On a.following = c.user_id 
WHERE a.user_id = 222 
LIMIT 9 

兩位候選人和捐助者有一個名字和姓氏和形象,所以我需要得到這些領域,而不是重複的字段。

我的結果 enter image description here

有人可以告訴我,我做錯了什麼?

在此先感謝。

+0

我知道我不這樣做的權利,請告訴我的方式! :) – 2012-02-26 09:33:51

+0

你爲什麼使用LIMIT? – 2012-02-26 09:38:28

+0

DISTINCT sill返回一個包含重複列的表。 – 2012-02-26 09:52:57

回答

1
SELECT a.follow_id, a.user_id, a.following, b.firstname, b.lastname, b.image 
FROM followers a 
LEFT JOIN candidates b ON a.following = b.user_id 
WHERE a.user_id = 222 


UNION DISTINCT 


SELECT a.follow_id, a.user_id, a.following, c.firstname, c.lastname, c.image 
FROM followers a 
LEFT JOIN donors c On a.following = c.user_id 
WHERE a.user_id = 222 

我不知道我是否正確理解您的問題。

+0

查看結果的圖片...重複的列 – 2012-02-26 09:47:19

+0

您是否嘗試過我的解決方案? – 2012-02-26 10:03:02

+0

我只是做了,它返回兩個額外的行,只有user_id,其他字段爲NULL。爲什麼它返回兩個額外的行?總共只有兩行數據。 – 2012-02-26 10:07:24

-1

您的follow_idfollowing字段是唯一的。由於您使用唯一的以下字段加入候選人和捐助者表,因此您需要創建2個子查詢,以從每個表中提取相關信息以及從followers表中提取user_id。

那麼你可以做你從你的追隨者表連接到每個子查詢:

SELECT f.user_id, 
     can.firstname, 
     can.lastname, 
     don.firstname, 
     don.lastname, 
     can.image, 
     don.image 
FROM followers f 
     LEFT JOIN (SELECT a.user_id, 
         a.following, 
         b.firstname, 
         b.lastname, 
         b.image 
        FROM followers a 
         INNER JOIN candidates b 
          ON a.following = b.user_id) can 
     ON f.user_id = can.user_id 
     LEFT JOIN (SELECT a.user_id, 
         a.following, 
         c.firstname, 
         c.lastname, 
         c.image 
        FROM followers a 
         INNER JOIN donors c 
          ON a.following = c.user_id) don 
     ON f.user_id = don.user_id 
WHERE f.user_id = 222 
LIMIT 9;