我试图通过JOINS找到两个不同的结果。表格看起来像;
SELECT id,member_id,registered_year FROM records;
我可以列出哪些会员在2012年注册,也在2013年注册;
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年注册的?
要提前做好准备。
发布于 2013-06-28 06:23:18
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年注册的用户
发布于 2013-06-28 06:23:31
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)
发布于 2013-06-28 06:21:26
对于不在两个表中的用户,可以使用左连接而不是内连接,然后测试是否为null。
示例:
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;
https://stackoverflow.com/questions/17354182
复制相似问题