我有两个数据库表。一个是egl_achievement,另一个是egl_achievement_member。一个人拥有成就,另一个人拥有成就。我正在尝试编写一个查询,该查询将返回成员没有的所有成就。我想我可以用减号,但是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成员所拥有的I,但是如何获得相反的I呢?
发布于 2014-06-02 21:50:34
您可以使用包含所有成就的子选择,然后只列出未包含的:
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);发布于 2014-06-02 21:51:18
你应该能使用。这应该选择57成员没有的所有不同的id。
select distinct eql_achievement.id as id
from eql_achievement where eql_achievement.id not in
(SELECT egl_achievement_member.eql_achievement_id as id FROM egl_achievement_member
WHERE egl_achievement_member.member_id =57;)发布于 2014-06-03 00:07:45
正确地加入并过滤没有id的那些(所以那些没有在你的A表中定义的)
SELECT * FROM `egl_achievement_member` `a`
RIGHT JOIN `egl_achievement` `b`
ON `a`.`achievement_id` = `b`.`id`
WHERE `a`.`achievement_id` IS NULL然后与用户
SELECT * FROM `egl_achievement_member` `a`
RIGHT JOIN `egl_achievement` `b`
ON `a`.`member_id` = 57
AND `a`.`achievement_id` = `b`.`id`
WHERE `a`.`achievement_id` IS NULL这是一个很好的时间表

https://stackoverflow.com/questions/24003804
复制相似问题