让我们来看看这个问题
select music,fav from MUSIC music
left join Favorite_Music fav on fav.id_music = music.id_music
where fav.id_user= 22 or fav.id_user is NULL
我的表Music
:
id_music | ....
1 |
... |
100 |
我的表Favorite_Music
:
id_fav | id_music | id_user
1 | 15 | 22
2 | 20 | 22
3 | 40 | 30
我想要检索所有MUSIC
,有些东西我想标记我user 22
最喜欢的音乐。
但是当我执行上面的查询时,music
40
不包括在内!!
所以我希望得到music
的所有Favorite_Music
并获取{{1}}的空值,这不属于我的22位用户。
答案 0 :(得分:1)
您必须在join子句中对外连接表应用过滤器,而不是where子句。像这样:
select music,fav
from MUSIC music
left join Favorite_Music fav on fav.id_music = music.id_music
and (fav.id_user= 22 or fav.id_user is NULL )
当你在where子句中过滤时,这看起来很明显,你的外连接变成了一个隐式的内连接。
答案 1 :(得分:1)
这是我认为你想要的查询:
select music, (case when fav.id_user is not null then 'No' else 'Yes' end) as IsFav22
from MUSIC music left join
Favorite_Music fav
on fav.id_music = music.id_music and fav.id_user = 22;