让我们有这个查询

   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子句中进行过滤(这似乎很显然)时,外部联接将成为隐式内部联接。

09-26 03:59