2015-07-20 36 views
1

我有一個包含贊助商數據的MySQL sponsors表和一個表示贊助商鏈接到特定雜誌的magazine_sponsors表。獲得兩個表之間的匹配行,否則在左表中爲NULL

sponsors 
------------------------- 
| id  | name   | 
------------------------- 
| sponA | Sponsor A | 
| sponB | Sponsor B | 
| sponC | Sponsor C | 
------------------------- 

magazine_sponsors 
---------------------------- 
| magazine_id | sponsor_id | 
---------------------------- 
| magA  | sponA  | 
| magA  | sponB  | 
| magB  | sponA  | 
---------------------------- 

我的目標是顯示,給出了具體的magazine_id,贊助商提供的完整列表,其中說,他們都與該雜誌的,哪些不是。例如,magB我想獲得:

---------------------------------------- 
| magazine_id | sponsor_id | name  | 
---------------------------------------- 
| magB  | sponA  | Sponsor A | 
| NULL  | sponB  | Sponsor B | 
| NULL  | sponC  | Sponsor C | 
---------------------------------------- 

我試着使用RIGHT JOIN以下查詢:

SELECT * 
FROM magazine_sponsors ms 
RIGHT JOIN sponsors s ON ms.sponsor_id=s.id 
WHERE ms.magazine_id="magB" 

但只輸出的第一行。

---------------------------------------- 
| magazine_id | sponsor_id | name  | 
---------------------------------------- 
| magB  | sponA  | Sponsor A | 
---------------------------------------- 

回答

1

WHERE中的條件將您的OUTER JOIN轉換爲INNER ONE。你要麼需要添加OR ms.magazine_id IS NULL到您的狀況或將其移動到ON條款:

SELECT * 
FROM sponsors s 
LEFT JOIN magazine_sponsors ms ON ms.sponsor_id=s.id AND ms.magazine_id="magB" 
0

試試這個:

SELECT * 
FROM magazine_sponsors ms 
LEFT JOIN sponsors s ON ms.sponsor_id=s.id 
WHERE ms.magazine_id="magB" 
+0

它返回只有一行「的MAGb」。不管怎麼說,還是要謝謝你。 – Giorgio

相關問題