繁体   English   中英

如何使用多于两个表的联接?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM