得到与在空值和左的连接
让我们有这个疑问得到与在空值和左的连接
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
这是不是我的22用户。
您必须将过滤器应用于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子句中,这似乎是一个明显的事情,你的外部过滤器连接成为一个隐含的内部联接。
不同时,我想要得到空值,就像@GordonLinoff在没有'fav.id_user是NULL'的情况下回答它的工作。 – Youssef 2014-12-18 23:41:03
这是我想你想查询:
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;
谢谢你的工作。 – Youssef 2014-12-18 23:37:10
的'id_user'有排在你期望从'id_music'列中检索'40'的'30'值? – SeeSharp 2014-12-18 23:07:12
是的,就像我在我的问题中显示的那样,我也想检索这一行 – Youssef 2014-12-18 23:10:46
在你的'Favourite_Music'表中,为什么你期望当'或者fav.id_user为NULL'时返回第三行构成你的'WHERE'子句的一部分?在这种情况下,该值不为空,它是'30' 除非我非常误解你想要达到的目标。 – SeeSharp 2014-12-18 23:12:44