2014-02-27 52 views
1

我有以下查詢SQL查詢連接和where子句

SELECT * 
    FROM tbl_events AS event 
     LEFT JOIN tbl_business_events AS bevent 
       ON event.event_id = bevent.event_id 
     LEFT JOIN tbl_business_sector AS bsec 
       ON event.event_id = bsec.event_id 
     LEFT JOIN tbl_sectors AS sector 
       ON bsec.sector_id = sector.sector_id 
     LEFT JOIN tbl_event_location AS eloc 
       ON event.event_id = eloc.event_id 
     LEFT JOIN tbl_locations AS location 
       ON location.location_id = eloc.location_id 
WHERE event.event_type = 1 

,我用它來拉出來的我的事件列表的所有細節,這工作,但我現在要拉出事件資料圖片從另一張桌子tbl_event_images。這個表格存儲所有的事件圖像,但有一個字段叫做is_profile_picture,它確定它是否是個人資料圖片(如果圖片是個人資料圖片,值爲0,如果圖片是個人資料圖片,則爲1)

所以我嘗試了以下查詢搶事件資料圖片以及信息與下面的查詢

SELECT * 
    FROM tbl_events AS event 
     LEFT JOIN tbl_event_images AS eIMG 
       ON event.event_id = eIMG.event_id 
     LEFT JOIN tbl_business_events AS bevent 
       ON event.event_id = bevent.event_id 
     LEFT JOIN tbl_business_sector AS bsec 
       ON event.event_id = bsec.event_id 
     LEFT JOIN tbl_sectors AS sector 
       ON bsec.sector_id = sector.sector_id 
     LEFT JOIN tbl_event_location AS eloc 
       ON event.event_id = eloc.event_id 
     LEFT JOIN tbl_locations AS location 
       ON location.location_id = eloc.location_id 
WHERE event.event_type =1 

休息,但這個查詢返回一個新行每張照片的事件在該表。

,所以我又試圖另一個where子句添加到上述 AND eIMG.is_profile_picture =1

,但因爲不是每個上市有照片更不用說資料圖片上面的查詢只返回資料圖片的事件。

我怎樣才能爲每個事件返回1行,無論他們是否有個人資料圖片?如果他們這樣做,然後它會增加圖像的名字,如果它不將其設置爲NULL

感謝 盧克

+0

只是爲了澄清:1)eIMG是包含圖片的表格,2)並非所有事件都有圖片?如果您想要連接到一個不包含匹配連接的行的表,則需要改爲使用OUTER連接。 – Alex

+0

@Alex左連接是外連接。 –

+0

@GoatCO對不起 - 我傾向於明確指定內部與外部,所以我沒有跟蹤。 – Alex

回答

1

而不是使用WHERE標準添加is_profile_picture條件您JOIN標準:

SELECT * 
FROM tbl_events AS event 
LEFT JOIN tbl_event_images AS eIMG 
    ON event.event_id = eIMG.event_id 
    AND eIMG.is_profile_picture =1 
LEFT JOIN tbl_business_events AS bevent 
    ON event.event_id = bevent.event_id 
LEFT JOIN tbl_business_sector AS bsec 
    ON event.event_id = bsec.event_id 
LEFT JOIN tbl_sectors AS sector 
    ON bsec.sector_id = sector.sector_id 
LEFT JOIN tbl_event_location AS eloc 
    ON event.event_id = eloc.event_id 
LEFT JOIN tbl_locations AS location 
    ON location.location_id = eloc.location_id 
WHERE event.event_type =1 

WHERE過濾器的所有結果,並在這種情況下有效地否定了您對LEFT JOIN的使用。添加到JOIN標準本身意味着只有一些圖片纔會加入,但原始查詢的所有結果仍將返回。

+0

優秀!!!非常感謝你 – user2886669

1

試試這個

SELECT * 
FROM tbl_events AS event 
LEFT JOIN tbl_event_images AS eIMG (ON event.event_id = eIMG.event_id AND eIMG.is_profile_picture = 1) 
LEFT JOIN tbl_business_events AS bevent ON event.event_id = bevent.event_id 
LEFT JOIN tbl_business_sector AS bsec ON event.event_id = bsec.event_id 
LEFT JOIN tbl_sectors AS sector ON bsec.sector_id = sector.sector_id 
LEFT JOIN tbl_event_location AS eloc ON event.event_id = eloc.event_id 
LEFT JOIN tbl_locations AS location ON location.location_id = eloc.location_id 
WHERE event.event_type =1 
+0

非常感謝你! – user2886669