Mysql 计算两个用户之间的联接(不包括其中一个用户不存在列的位置)
Sqlfiddle此处: 我有一个表格(Mysql 计算两个用户之间的联接(不包括其中一个用户不存在列的位置),mysql,sql,database,Mysql,Sql,Database,Sqlfiddle此处: 我有一个表格(user\u answers),其中包含用户对问题的答案。在SQLFIDLE中,我们有用户1和用户2的数据。用户1总共回答了5个问题,用户2总共回答了8个问题 我正在寻找的结果: 我想知道一个用户回答了多少问题,而另一个用户也回答了多少问题。示例输出如下:“用户1回答了您回答的8个问题中的5个” 我已经尝试加入表,但它给我的结果比我预期的要多,而且我还没有指定要在此查询中测试哪些用户: SELECT * FROM user_answers t1 JOIN
user\u answers
),其中包含用户对问题的答案。在SQLFIDLE中,我们有用户1和用户2的数据。用户1总共回答了5个问题,用户2总共回答了8个问题
我正在寻找的结果:我想知道一个用户回答了多少问题,而另一个用户也回答了多少问题。示例输出如下:“用户1回答了您回答的8个问题中的5个” 我已经尝试加入表,但它给我的结果比我预期的要多,而且我还没有指定要在此查询中测试哪些用户:
SELECT * FROM user_answers t1
JOIN user_answers t2 ON t1.uid > t2.uid
AND t1.answer IS NOT NULL
SELECT * FROM user_answers t1
JOIN user_answers t2 ON t1.uid > t2.uid
AND t1.answer IS NOT NULL
AND t1.uid = 1
AND t2.uid = 2
然后,当我尝试指定用户时,此查询没有结果:
SELECT * FROM user_answers t1
JOIN user_answers t2 ON t1.uid > t2.uid
AND t1.answer IS NOT NULL
SELECT * FROM user_answers t1
JOIN user_answers t2 ON t1.uid > t2.uid
AND t1.answer IS NOT NULL
AND t1.uid = 1
AND t2.uid = 2
我觉得我越来越近了,但需要一些指导
谢谢。使用子查询怎么样
SELECT * FROM user_answers t1
where t1.uid=1 and t1.quid in
(select t2.quid from user_answers t2 where t2.uid=2);
要查找每个用户提出的问题总数,以及有多少问题是一致的:
SELECT
count(distinct t1.id) user1_total,
sum(t1.quid = t2.quid) shared_total,
count(distinct t2.id) user2_total
FROM user_answers t1
CROSS JOIN user_answers t2
WHERE t1.uid=1
AND t2.uid=2
使用您的数据,这将返回:
USER1_TOTAL SHARED_TOTAL USER2_TOTAL
5 5 7
看
此外,任何时候,您都可以将
WHERE ID IN(子查询)
替换为连接
,您应该-连接(实际上)总是执行得更好。这非常有效。我在玩一个子查询,但我也在读它可能不如连接的地方。在这种情况下,联接仍然是可能的,还是子查询是我所寻找的结果的最佳方法?干杯。您当然可以将其替换为执行以下操作的联接`从用户中选择t1.quid\u回答t1联接用户\u回答t1上的t2.id=t2.id组,使用计数(*)>1;的t1.quid。但我建议先看看这个答案:这根本不能回答这个问题。用户的问题总数在哪里?共有的问题总数在哪里?