首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:基于两个列值的结果集重复筛选

SQL:基于两个列值的结果集重复筛选
EN

Stack Overflow用户
提问于 2016-08-23 16:02:51
回答 2查看 83关注 0票数 0

我有一个网站,收集来自两种形式的反馈。我有一个SQL查询,它返回通过其中一个或两个用户提交反馈的用户的名称。反馈表单在表的feedback列中给出ID的5和6。

代码语言:javascript
复制
SELECT 1.firstname, 1.lastname, 2.feedback, 2.timemodified
FROM 1 
INNER JOIN 2 ON 1.id = 2.userid 
ORDER BY 1.lastname

这将返回如下所示的结果集:

代码语言:javascript
复制
firstname    lastname    feedback    timemodified
---------    --------    --------    ------------
john         doe         5           1471012069
john         doe         6           1471012075
jane         smith       5           1471013449
jane         smith       6           1471055903
joe          blow        6           1473058839
jim          jones       5           1471033691

我只对那些通过两种表格(5和6)提交反馈意见的用户感兴趣。我想过滤我的结果集,使没有被淘汰的人和那些只被列出一次的人。(例如,上面的结果集应该只显示john和jane smith,每次一次。)想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-23 16:07:54

若要只为提交了反馈项5和6的每个用户返回一行,您可以两次加入2表,对上述feedback ids进行筛选。

代码语言:javascript
复制
SELECT 1.firstname, 1.lastname,
    2a.feedback, 2a.timemodified,
    2b.feedback, 2b.timemodified
FROM 1 
INNER JOIN 2 as 2a ON 1.id = 2a.userid and 2a.feedback = 5
INNER JOIN 2 as 2b ON 1.id = 2b.userid and 2b.feedback = 6
ORDER BY 1.lastname

您还可以使用WHERE EXISTS子句实现类似的结果。

代码语言:javascript
复制
SELECT 1.firstname, 1.lastname
FROM 1
WHERE
EXISTS (SELECT * FROM 2 WHERE 2.userid = 1.id and feedback = 5)
AND
EXISTS (SELECT * FROM 2 WHERE 2.userid = 1.id and feedback = 6)

注意:我在我的答案中保留了您非常不寻常的12表名,以便答案与问题相匹配,但我怀疑这些都是真正的表名。

票数 1
EN

Stack Overflow用户

发布于 2016-08-23 16:10:06

代码语言:javascript
复制
SELECT 1.firstname, 
       1.lastname
FROM 1
WHERE 1.id IN (SELECT 2.userid FROM 2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39105943

复制
相关文章

相似问题

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