多子查询连接+多WHERE子句:关联4表查询指定投放的广告与图片
解决方案
首先,我们需要通过多对多中间表ad_placement关联ad和placement表,再通过ad_id关联image表,就能精准拿到符合筛选条件的url和image字段。以下是对应的SQL查询语句:
SELECT ad.url, image.image FROM ad JOIN ad_placement ON ad.id = ad_placement.ad_id JOIN placement ON ad_placement.placement_id = placement.id JOIN image ON ad.id = image.ad_id WHERE placement.name = 'name_1';
关联逻辑说明:
- 用
JOIN连接ad和ad_placement,通过ad.id = ad_placement.ad_id定位所有关联了投放位置的广告记录 - 接着连接
placement表,通过ad_placement.placement_id = placement.id筛选出投放位置名称为name_1的目标数据 - 最后连接
image表,通过ad.id = image.ad_id匹配对应广告的图片地址
如果存在广告未关联图片的情况,你可以把最后一个JOIN改成LEFT JOIN,这样即使没有图片的广告也会被返回(image字段会显示为NULL):
SELECT ad.url, image.image FROM ad JOIN ad_placement ON ad.id = ad_placement.ad_id JOIN placement ON ad_placement.placement_id = placement.id LEFT JOIN image ON ad.id = image.ad_id WHERE placement.name = 'name_1';
内容的提问来源于stack exchange,提问作者user3541631
相关产品推荐
相关产品推荐

