Mysql 获取两个表之间的匹配行,否则为空

Mysql 获取两个表之间的匹配行,否则为空,mysql,join,Mysql,Join,我有一个MySQL赞助商表,其中包含赞助商数据,还有一个杂志\u赞助商表,说明哪些赞助商链接到特定的杂志 sponsors ------------------------- | id | name | ------------------------- | sponA | Sponsor A | | sponB | Sponsor B | | sponC | Sponsor C | ------------------------- magaz

我有一个MySQL
赞助商
表,其中包含赞助商数据,还有一个
杂志\u赞助商
表,说明哪些赞助商链接到特定的杂志

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

magazine_sponsors
----------------------------
| magazine_id | sponsor_id |
----------------------------
| magA        | sponA      |
| magA        | sponB      |
| magB        | sponA      |
----------------------------
我的目标是,给定一个特定的
杂志id
,显示可用赞助商的完整列表,说明哪些赞助商链接到该杂志,哪些没有链接到该杂志。例如,使用
magB
我想得到:

----------------------------------------
| magazine_id | sponsor_id | name      |
----------------------------------------
| magB        | sponA      | Sponsor A |
| NULL        | sponB      | Sponsor B |
| NULL        | sponC      | Sponsor C |
----------------------------------------
我已使用
右连接尝试了以下查询:

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

中的条件是将外部联接转换为内部联接。您需要将
或ms.magazine_id为NULL
添加到您的条件中,或将其移动到
ON
子句:

SELECT * 
FROM sponsors s 
LEFT JOIN magazine_sponsors ms ON ms.sponsor_id=s.id AND ms.magazine_id="magB"
试试这个:

SELECT * 
FROM magazine_sponsors ms 
LEFT JOIN sponsors s ON ms.sponsor_id=s.id 
WHERE ms.magazine_id="magB"
它只返回带有“magB”的行。无论如何,谢谢你。