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