首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回用户没有的Ids

返回用户没有的Ids
EN

Stack Overflow用户
提问于 2014-06-02 21:44:43
回答 3查看 51关注 0票数 1

我有两个数据库表。一个是egl_achievement,另一个是egl_achievement_member。一个人拥有成就,另一个人拥有成就。我正在尝试编写一个查询,该查询将返回成员没有的所有成就。我想我可以用减号,但是mysql不支持这一点。

代码语言:javascript
复制
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呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-02 21:50:34

您可以使用包含所有成就的子选择,然后只列出未包含的:

代码语言:javascript
复制
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);
票数 3
EN

Stack Overflow用户

发布于 2014-06-02 21:51:18

你应该能使用。这应该选择57成员没有的所有不同的id。

代码语言:javascript
复制
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;)
票数 0
EN

Stack Overflow用户

发布于 2014-06-03 00:07:45

正确地加入并过滤没有id的那些(所以那些没有在你的A表中定义的)

代码语言:javascript
复制
SELECT * FROM `egl_achievement_member` `a` 
RIGHT JOIN `egl_achievement` `b` 
ON `a`.`achievement_id` = `b`.`id` 
WHERE `a`.`achievement_id` IS NULL

然后与用户

代码语言:javascript
复制
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

这是一个很好的时间表

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24003804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档