2015-07-20 29 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

相关问题