mysql表连接选择

时间:2009-09-29 00:57:00

标签: sql mysql

我有两张桌子:

  • TOPICS(id,title)
  • 答案(id,id_topicid_user,回答)

...我想做一个选择,在一次选择中检测属于用户的所有问题。

我尝试进行连接,但这不起作用,因为如果用户回答了两次主题,它将返回具有相同主题的2行。我试着做一个SELECT DISTINCT,但也失败了。

3 个答案:

答案 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