mysql - 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?
解决方案
我想你的意思是写这个:
SELECT achievement,
achieved
FROM PlayerAchieved
LEFT JOIN AchievedAchievemnts
ON AchievedAchievments.achievementname = PlayerAchieved.achievementname
WHERE AchievedAchievments.achievementname IS NULL
推荐阅读
- google-cloud-storage - 如何使用 CDAP 创建从 BigQuery 到 Google Storage 的 ETL?
- python - np.save 有没有办法处理 MPI 文件对象?
- html - 无法让页脚左右对齐
- c# - 如何获取要发布到控制器的复选框值列表
- javascript - TS2339:“元素”类型上不存在属性“样式”
- reactjs - 为 Material-Table 创建自定义模态
- user-interface - 如何正确设计高 DPI 感知(4k 就绪)的 Delphi 应用程序 UI?
- amazon-s3 - S3 网络托管端点产生“无法访问此站点”
- python - 使用python进行一次热编码的快速方法
- python-3.x - 进行 for 循环,直到某个条件变为不真实