2014-06-30 198 views
1

我有兩張表,一張是內容,一張是圖片。如何使用兩個柱作爲連接的參數來連接兩個表?

我的問題是:圖像不是必填字段,但如果圖像確實存在,則列i.type必須是某個指定的數字。

我正在使用的查詢還返回具有相同ID的其他表的內容(我知道這是錯誤的,但這是我現在擁有的)。

下面是該查詢

SELECT e.*, i.imagem, i.folder 
FROM event e 
LEFT JOIN img_rel i ON e.id = i.rel 
WHERE e.slug = 'slug' 
AND e.type = 'even'; 

有沒有辦法做到這一點還是我將不得不使用PHP來篩選呢?

+0

目前尚不清楚你在問什麼。但是我懷疑你想在ON子句中的'i.type'中包含一個謂詞,例如**'ON id.rel = e.id = i.rel AND i.type ='某個指定的數字'**。 (通過將謂詞包含在ON子句中,它仍然是一個「外部」連接,如果將該謂詞放入WHERE子句中,它會否定連接的「外部」,我懷疑這是您遇到的問題。 (當找不到匹配的行時,SELECT列表中'i'的列將爲NULL。) – spencer7593

回答

2

join ... on ... and (i.imagem IS NULL or i.type = 'myspecialvalue') 

是你需要什麼?

+0

完美的工作。謝謝 –

+0

+1我不知道如何獲得接受沒有得到upvote,所以有一個對我來說。 – Umbrella

1

您可以使用CASE在查詢

SELECT 
    e.*, 
    CASE 
    WHEN i.imagem IS NOT NULL 
    AND i.type = 'your number' 
    THEN i.imagem 
    ELSE NULL 
    END AS imagem, 
    i.folder 
FROM 
    event e 
    LEFT JOIN img_rel i 
    ON e.id = i.rel 
WHERE e.slug = 'slug' 
    AND e.type = 'even'; 
+1

我喜歡這個,我會盡力做到這一點。謝謝 –

+0

這不會比僅僅添加ON條款的另一個條件是什麼? – Umbrella

0

,只要你想的的加入在子句您可以使用盡可能多的列。你甚至可以在Join上加入靜態過濾器。

Select * 
From Table1 t1 Left Join 
     Table2 t2 On t1.col1 = t2.col2 
       And t1.col2 = t2.col2 
       And t1.col3 = 'something static' 
Where t1.col1 = 'this will match both col1 and t2.col1'