簡體   English   中英

從兩個不同的來源加入同一張桌子

[英]Join on the same table from two different sources

我有3張桌子:人物,圖片和評論。 人員具有字段ID和名稱。 圖片是針對特定人物的,因此具有ID,person_id,image_name。 注釋是一種混合表,因為注釋可以直接用於一個人或一個圖像-因此它具有字段id,person_id,image_id和comment。

兩個評論都使用同一張表,因為這兩種情況的評論插件都相同,我還需要在實時供稿中顯示所有評論,因此將它們保存在一個表中似乎更容易。

我現在的問題是,如果評論是針對個人還是針對圖像,我該如何編寫一個查詢,使我所有相關數據都毫無保留。

Select應該為每個帶有附加數據的評論返回一行:評論image_name(如果評論與image_id關聯)person_name(無論評論與人或圖像直接關聯)

我面臨的問題是,如果存在image_id,我真的不知道如何通過圖像選擇人,否則直接通過person_id選擇人。 此外,由於很難用語言表達,因此很難尋求這種解決方案。

編輯並添加sqlfiddle: http ://sqlfiddle.com/#!9/7fa06a/1

當前缺少的是第二行的人員數據。 該數據應該可用,因為圖像表具有person_id,但我不知道如何選擇它。

解決方案似乎是使用OR將人員表與人員和圖像連接在一起,並根據存在的對象將其連接:

SELECT * 
FROM comment 
LEFT JOIN image ON image.id = comment.image_id
LEFT JOIN person ON person.id = image.person_id OR
          person.id = comment.person_id

您可以使用COALESCE()做到這一點。 它返回不為NULL的第一個參數。

SELECT comment.comment, image.name, COALESCE(person.name, image_person.name)
FROM comment
LEFT JOIN person on person.id = comment.person_id
LEFT JOIN image ON image.id = comment.image_id
LEFT JOIN person image_person ON image_person.id = image.person_id

但是,user1985273的答案應該更有效。

您需要將注釋表作為主表,然后離開聯接人和圖像表。

Select *  from comment c left join person p on p.id=c.person_id left join image i on i.image_id=i.id and i.person_id=c person_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM