如何使用两个以上的表连接?

时间:2011-06-22 11:16:13

标签: php mysql sql

我有三张桌子。他们是

tb_albums ---->id,title, description

tb_photos ---->id,album_id, photo

tb_tags ---->id,album_id, tag

在这里,我想获取相册的详细信息,以及照片&它通过 tb_albums.id 标记。

如何在这里使用连接查询?

2 个答案:

答案 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