[英]MySQL joining table to itself and comparing results
MySQLFiddle在这里: http ://sqlfiddle.com/#!2/15d447/1
我有一个要处理的表:
表1: user_answers
表(存储用户对各种问题的答案)
存储的值得注意的值是用户id(column uid
),他们正在回答的问题的问题id(column quid
),问题的答案(column answer
)以及其答案的重要性(column importance
)。
我想要的最终结果:
我希望能够抓住任何两个用户已经回答的所有问题,从另一方未回答的问题中排除任何答案,或者对于任一用户,对于同一个问题的值为1的答案均不包括在内importance
。 同样,这将仅一次用于比较两个用户。
我的尝试一直没有成功,但是这是我尝试过的,只是把事情拼凑在一起:
#attempt one: trying to exclude answers that were not answered by both users
SELECT * FROM user_answers AS uid1
JOIN user_answers AS uid2 ON uid1.uid = uid2.uid
WHERE uid1.uid = 1
AND uid2.uid = 20008
AND uid1.quid IS NOT NULL
AND uid2.quid IS NOT NULL;
这不会返回任何结果,但是我不确定为什么。
#attempt two: trying to exclude where answers are the same for both users
SELECT * FROM user_answers AS uid1
LEFT JOIN user_answers AS uid2 ON (uid1.uid = uid2.uid AND uid1.answer <> uid2.answer)
这给了我结果,但是由于加入,似乎一切都加倍了。 我还尝试过消除所有相同的答案,似乎在这个意义上是可行的。
任何指导表示赞赏。
谢谢。
您可以使用汇总查询回答您的问题。 这个想法是使用having
子句为您正在寻找的条件过滤行。
因为您根本对importance = 1
问题不感兴趣,所以使用where
子句过滤了这些问题:
select ua.quid
from user_answers ua
where importance <> 1 and uid in (1, 20008)
group by ua.quid
having sum(uid = 1) > 0 and
sum(uid = 20008) > 0;
如果要包括答案,可以执行以下操作:
select ua.quid,
group_concat(concat(uid, ':', answer) order by uid) as answers
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.