我有两张桌子:
id_topic
,id_user
,回答)...我想做一个选择,在一次选择中检测属于用户的所有问题。
我尝试进行连接,但这不起作用,因为如果用户回答了两次主题,它将返回具有相同主题的2行。我试着做一个SELECT DISTINCT,但也失败了。
答案 0 :(得分:1)
尝试:
SELECT id, topic
FROM topics
WHERE id IN (SELECT id_topic
FROM answers
WHERE id_user = <USERID>)
...或:
SELECT id, topic
FROM topics
WHERE EXISTS (SELECT *
FROM answers
WHERE id_user = topics.id)
...并根据您的索引方案测试性能。仅限MySQL的最新版本。
答案 1 :(得分:0)
SELECT * FROM topics
WHERE id IN (SELECT id_topic FROM answers WHERE id_user = ?);
子查询是否多次返回某些值并不重要。外部查询中的任何给定行都将匹配或不匹配。
就像E. F. Codd所说,“如果事情是真的,那说两次就不会更真实。”
答案 2 :(得分:0)
如果您要查看用户回答的主题,请尝试以下操作:
SELECT t.title, a.id_user, COUNT(a.id)
FROM topics t LEFT JOIN answers a
ON (t.id=a.topic_id)
GROUP BY t.title, a.id_user;
以上内容将为您提供该用户的标题,用户和答案数(如果有)。如果您只想要已回答的主题,请使用JOIN
代替LEFT JOIN
。