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