我有三张桌子。他们是
tb_albums ---->id,title, description
tb_photos ---->id,album_id, photo
tb_tags ---->id,album_id, tag
在这里,我想获取相册的详细信息,以及照片&它通过 tb_albums.id 标记。
如何在这里使用连接查询?
答案 0 :(得分:1)
通常,您可以根据需要在JOIN中使用尽可能多的表。只需添加另一个JOIN语句。您可以参考k102's answer获取正确的语法(虽然这不会产生正确的结果)。
但在这种特殊情况下,您不希望在所有表格上使用简单的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优化,只有在没有其他选择时才应该这样做。
答案 1 :(得分:0)
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