【发布时间】:2014-02-27 17:56:41
【问题描述】:
我有以下问题
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
谢谢 卢克
【问题讨论】:
-
澄清一下:1)eIMG 是包含图片的表格,2)不是所有的事件都有图片吗?如果要连接的表可能不包含与连接匹配的行,则需要改用 OUTER 连接。
-
@Alex 左连接是外连接。
-
@GoatCO 抱歉 - 我倾向于明确指定内部与外部,所以我偏离了轨道。
标签: mysql sql select left-join