我有两个数据库表。一个是egl_成就,另一个是egl_成就会员。一个只拥有成就,另一个拥有成就的成员。我正在尝试编写一个查询,该查询将返回一个成员没有的所有成就。我想我可以用减号,但是mysql不支持这个。
SELECT egl_achievement.id as id FROM egl_achievement LEFT JOIN egl_achievement_member ON egl_achievement.id = egl_achievement_member.egl_achievement_id WHERE egl_achievement_member.member_id =57;
这显然会返回成员57拥有的id,但我如何才能得到相反的id?
最佳答案
您可以使用包含所有成就的子选择,然后仅列出未包含的成就:
SELECT egl_achievement.id as id
FROM egl_achievement
WHERE egl_achievement.id NOT IN(
SELECT egl_achievement_member.egl_achievement_id
FROM egl_achievement_member
WHERE egl_achievement_member.member_id =57);