2017-05-05 71 views
1

我有3個表格:人物,圖片和評論。人有字段ID和名稱。圖像是針對特定人員的,因此它具有id,person_id,image_name。而評論是一種混合表格,因爲評論可以直接針對某個人或一個imaga--因此它具有字段id,person_id,image_id和評論。使用從兩個不同的來源加入同一張表

同桌的兩個意見,因爲評論插件是這兩種情況下相同的,我還需要顯示實時輸入所有評論因此它似乎更容易讓他們在一個表中。

我現在的問題是,我如何寫一個查詢,給我所有的相關數據reardless如果評論是人或圖像。

選擇應該返回一個行,並與其他數據每個註釋: 評論 IMAGE_NAME(如果評論是聯繫在一起image_id) PERSON_NAME(如果不考慮註釋直接關係到人或圖像)

問題即時通訊面對的是我真的不知道如何通過圖像選擇人物,如果image_id存在,並通過person_id直接選擇人物。也很難尋找這種解決方案,因爲它很難用文字說明。

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

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

+2

這將有助於如果你包括每個樣本數據表格,你試圖從數據中獲得的輸出,並顯示你自己努力解決這個問題。你能[編輯]你的文章以包含這些信息嗎? –

+0

編輯的主貼,並添加sqlfiddle – user1985273

回答

0

你可以用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的答案應該更有效率。

+0

不太什麼即時尋找,編輯主哨,並添加sqlfiddle – user1985273

+0

我想我現在弄明白了。我確定了答案。 – Pharaoh

0

您需要將評論表製作爲主表格,然後將人員和圖像表格連接起來。

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 
+0

不是什麼即時通訊尋找,編輯的主要帖子,並添加sqlfiddle – user1985273

1

解決方案似乎是參與人表使用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