2014-09-26 67 views
1

我試圖做幾個表上的左連接。但是,它顯示了所有左連接表結果。主表是'a',但它顯示重複的id,因爲它的id在其他表上多次存在。我怎樣才能選擇其他表格上的第一行?或者在表格'a'上選擇不同的結果?這裏是我的SQLMYSQL:左只加入第一行或選擇不同

SELECT a.adsId, a.adsName, a.adsUrl, a.sourceFileName, c.userName, d.preferenceId, e.ppv FROM y5ads_new.ads_source a 
       INNER JOIN y5ads_new.campaign b ON a.campaignId=b.campaignId 
       INNER JOIN y5ads_new.system_member c ON b.createdBy=c.memberId 
       INNER JOIN y5ads_new.ads_preference d ON a.adsId=d.adsId 
       INNER JOIN y5ads_new.ads_rates e ON a.adsId=e.adsId 
       WHERE a.status='2' AND a.deleted='False' AND CURDATE() BETWEEN a.startDate and a.endDate 
       AND b.status='2' AND b.deleted='False' AND CURDATE() BETWEEN b.startDate and b.endDate 
       AND d.deleted='False' AND CURDATE() BETWEEN d.startDate and d.endDate 
       AND e.is_active='1' AND CURDATE() BETWEEN e.startDate and e.endDate 
       ORDER BY a.adsId DESC, d.preferenceId DESC, e.id DESC 
+2

如果你喜歡,可以考慮下列行爲這個簡單的兩步過程:1.如果您還沒有這樣做,提供適當的DDL(和/或sqlfiddle),以便我們可以更容易地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry 2014-09-26 09:09:31

回答

2

讓你的ID不同,並使用LEFT JOIN:

SELECT a.adsId, a.adsName, a.adsUrl, a.sourceFileName, c.userName, d.preferenceId, e.ppv 
FROM y5ads_new.ads_source AS a 
LEFT JOIN (SELECT DISTINCT campaignId as campaignId FROM y5ads_new.campaign) AS b 
ON a.campaignId=b.campaignId 
LEFT JOIN (SELECT DISTINCT memberId AS memberId, userName FROM y5ads_new.system_member) AS c 
ON b.createdBy=c.memberId 
LEFT JOIN (SELECT DISTINCT adsId AS adsId, preferenceId FROM y5ads_new.ads_preference) AS d 
ON a.adsId=d.adsId 
LEFT JOIN (SELECT DISTINCT adsId AS adsId, ppv FROM y5ads_new.ads_rates) AS e 
ON a.adsId=e.adsId 
WHERE ... 
+0

這不起作用,我收到未知列c.userName錯誤 – nodeffect 2014-10-15 06:59:17

+0

您是對的,我更新了我的答案。 – Benvorth 2014-10-15 07:14:48

+0

omg,我看不出有什麼區別,但是它的工作原理...我可以用前一個來比較,或者你能告訴我哪裏出了問題嗎? – nodeffect 2014-10-15 07:18:15