簡體   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