首页 > 解决方案 > MySQL 'IS NULL' 在 JOIN 查询中将值设置为 NULL

问题描述

我有一个包含两个表的数据库:PlayerAchievements 和AchievedAchievements。我想加入这些表并检查正确的表(玩家取得的成就)是否为 NULL,这意味着玩家显然尚未获得该成就:

SELECT achievement
     , achieved 
  FROM 
     ( PlayerAchieved 
  LEFT 
  JOIN AchievedAchievemnts 
    ON AchievedAchievements IS NULL
     );

问题是,如果我只是检查表格,则执行以下操作:

SELECT p.achievementname
     , a.achievementname
     , achieved 
  FROM 
     ( PlayerAchieved p
  LEFT 
  JOIN AchievedAchievements a
    ON p.achievementname = a.achievementname
     );

给了我我的期望:

achievementname achievementname achieved
=============== =============== ========
First Kill      First Kill      1
Monster Kill    Monster Kill    NULL
...

但是当我这样做时

SELECT PlayerAchieved.achievementname, AchievedAchievments.achievementname, achieved FROM (PlayerAchieved LEFT OUTER JOIN AchievedAchievements ON PlayerAchieved.achievementname = AchievedAchievments.achievementname AND achieved IS NULL);

我明白了

achievementname achievementname achieved
=============== =============== ========
First Kill      First Kill      NULL
Monster Kill    Monster Kill    NULL
...

一切都变成了NULL。为什么一切都从无到有变成了NULL?

标签: mysql

解决方案


我想你的意思是写这个:

SELECT      achievement,
            achieved
FROM        PlayerAchieved
LEFT JOIN   AchievedAchievemnts
    ON      AchievedAchievments.achievementname = PlayerAchieved.achievementname
WHERE       AchievedAchievments.achievementname IS NULL

推荐阅读