首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL -联接(例外)

MySQL -联接(例外)
EN

Stack Overflow用户
提问于 2013-06-28 06:18:46
回答 4查看 48关注 0票数 0

我试图通过JOINS找到两个不同的结果。表格看起来像;

代码语言:javascript
运行
复制
SELECT id,member_id,registered_year FROM records;

我可以列出哪些会员在2012年注册,也在2013年注册;

代码语言:javascript
运行
复制
SELECT member_id FROM records a
INNER JOIN records b ON a.member_id=b.member_id
WHERE  a.registered_year='2013' AND b.registered_year='2012';

但我不能列出它的版本。如何列出哪些会员是在2012年注册的,而不是在2013年注册的?

要提前做好准备。

EN

回答 4

Stack Overflow用户

发布于 2013-06-28 06:23:18

代码语言:javascript
运行
复制
SELECT member_id FROM records a 
WHERE a.registered_year='2012' and  member_id not in 
(
  SELECT member_id FROM records
  WHERE registered_year='2013'
) 

内部select SELECT member_id FROM records WHERE registered_year='2013'获取2013年注册的所有用户

外层获取所有不在内部的用户,选择2012年注册的用户

票数 2
EN

Stack Overflow用户

发布于 2013-06-28 06:23:31

代码语言:javascript
运行
复制
SELECT member_id
  FROM records a
 WHERE registered_year = 2012
   AND NOT EXISTS (SELECT null
                     FROM records b
                    WHERE a.member_id = b.member_id
                      AND b.registered_year = 2013)
票数 2
EN

Stack Overflow用户

发布于 2013-06-28 06:21:26

对于不在两个表中的用户,可以使用左连接而不是内连接,然后测试是否为null。

示例:

代码语言:javascript
运行
复制
SELECT a.member_id 
FROM records a
  LEFT JOIN records b ON  a.member_id = b.member_id
                      AND b.registered_year = '2013' 
WHERE a.registered_year = '2012' 
  AND b.registered_year IS NULL;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17354182

复制
相关文章

相似问题

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