Mysql查询问题

时间:2011-08-03 06:18:55

标签: mysql

我有一个包含以下列的mysql表:

id (autoincremented primary key)
user_id
test_id
test_score

如何将所有测试数据与参与test_id = 5的用户联系起来。我希望所有测试数据(不仅仅是test_id 5)适用于参与该特定测试的用户。

4 个答案:

答案 0 :(得分:2)

我相信这会让你得到你想要的东西。

SELECT * 
  FROM table 
  WHERE user_id IN 
   (SELECT DISTINCT user_id 
    FROM table
      WHERE test_id = 5)

答案 1 :(得分:1)

听起来你想要自我加入。这样的事情会利用索引(假设你有user_id的索引和test_id上的索引,你应该这样做:

SELECT DISTINCT t1.*
FROM `tableName` t1
INNER JOIN `tableName` t2 ON t2.user_id = t1.user_id
WHERE t2.test_id = 5

我想这提出了另一点。你的桌子是如何编入索引的?只是数字主键?您通常希望在JOIN或WHERE子句中使用的所有列上都有索引。因此,您希望user_id上有索引,test_id上有索引。

用户可以多次进行相同的测试吗?如果不是,那么您希望通过在user_idtest_id之间拥有唯一的多列(“复合”)索引来限制它。然后为WHERE子句添加一个常规索引test_id

答案 2 :(得分:0)

如果我正确理解你的问题,那么基本的方法就是将表格连接到自己身上。

select allTestData.* from TEST_TABLE allTestData
left outer join (select user_id from TEST_TABLE where test_id = 5) testIdFive
on allTestData.user_id = testIdFive.user_id

答案 3 :(得分:0)

尝试此查询,

SELECT test data 
FROM TABLENAME 
WHERE user_id IN (
  SELECT user_id 
  FROM TABLENAME 
  WHERE test_id = 5
)