我有一个网站,收集两种表格的反馈。我有一个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
我只对那些通过BOTH表单(5和6)提交反馈的用户感兴趣。我想过滤我的结果集,以便任何没有被淘汰的人和那些只被列出一次的人。 (例如,上面的结果集应该只显示john doe和jane smith,每次一次。)想法?
答案 0 :(得分:1)
要仅为已提交反馈项目5和6的每个用户返回一行,您可以加入2
表两次,过滤上述feedback
ID。
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
的极不寻常的表名,以便答案与问题相符,但我怀疑这些是您真正的表名。< / p>
答案 1 :(得分:0)
SELECT 1.firstname,
1.lastname
FROM 1
WHERE 1.id IN (SELECT 2.userid FROM 2)