我有一个网站,收集来自两种形式的反馈。我有一个SQL查询,它返回通过其中一个或两个用户提交反馈的用户的名称。反馈表单在表的feedback列中给出ID的5和6。
SELECT 1.firstname, 1.lastname, 2.feedback, 2.timemodified
FROM 1
INNER JOIN 2 ON 1.id = 2.userid
ORDER BY 1.lastname这将返回如下所示的结果集:
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,每次一次。)想法?
发布于 2016-08-23 16:07:54
若要只为提交了反馈项5和6的每个用户返回一行,您可以两次加入2表,对上述feedback ids进行筛选。
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子句实现类似的结果。
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)注意:我在我的答案中保留了您非常不寻常的1和2表名,以便答案与问题相匹配,但我怀疑这些都是真正的表名。
发布于 2016-08-23 16:10:06
SELECT 1.firstname,
1.lastname
FROM 1
WHERE 1.id IN (SELECT 2.userid FROM 2)https://stackoverflow.com/questions/39105943
复制相似问题