[英]How to use join for more than two table?
我有三张桌子。
tb_albums ---->id,title, description
tb_photos ---->id,album_id, photo
tb_tags ---->id,album_id, tag
在这里,我想通过tb_albums.id获取相册的详细信息及其照片和标签。
如何在此处使用联接查询?
通常,您可以根据需要在JOIN中使用尽可能多的表。 只需添加另一个JOIN语句。 您可以参考k102的答案以获取正确的语法(尽管不会产生正确的结果)。
但是在这种特殊情况下,除非每个相册只有一张照片并且每个相册只有一个标签,否则您不想在所有表上都使用简单的JOIN。 如果您每张相册有一张以上的照片,并且每张相册有一个以上的标签,则在单个查询中JOIN album_id上的两个表都会产生两者的笛卡尔积,换句话说,每个相册中标签和照片的所有可能组合。 对于N
张照片和M
标签,结果为N * M
,而不是N + M
。
另外,没有必要与tb_albums结合使用,因为您无需为每张照片和每个标签重复有关每个相册的信息。
正确的方法是从每个表中包含3个单独的简单SELECT,并将其结果组合到应用程序级别。
如果出于某种尴尬的原因,您需要使用一个查询来执行此操作,则可以执行以下操作:
SELECT * FROM tb_albums as A JOIN
(SELECT 'photo', id, photo as value FROM tb_photos
UNION ALL
SELECT 'tag', id, tag as value FROM tb_tags) as B ON B.album_id = A.id
请注意,这比单独的SELECT方式不那么理想,只有在没有其他选择的情况下才应该这样做。
select * from tb_albums a
join tb_photos p on a.id = p.album_id
join tb_tags t on a.id = t.album_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.