我有一个包含以下列的mysql表:
id (autoincremented primary key)
user_id
test_id
test_score
如何将所有测试数据与参与test_id = 5的用户联系起来。我希望所有测试数据(不仅仅是test_id 5)适用于参与该特定测试的用户。
答案 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_id
和test_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
)