Mysql查询问题
我有一个mysql表,其中包含以下列:Mysql查询问题,mysql,Mysql,我有一个mysql表,其中包含以下列: id (autoincremented primary key) user_id test_id test_score 如何获取与参与测试的用户相关的所有测试数据_id=5。我想要参与该特定测试的用户的所有测试数据(不仅仅是test_id 5) 如果我正确理解了你的问题,那么基本的方法就是将表本身连接起来 select allTestData.* from TEST_TABLE allTestData left outer join (select us
id (autoincremented primary key)
user_id
test_id
test_score
如何获取与参与测试的用户相关的所有测试数据_id=5。我想要参与该特定测试的用户的所有测试数据(不仅仅是test_id 5) 如果我正确理解了你的问题,那么基本的方法就是将表本身连接起来
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
如果我正确理解了你的问题,那么基本的方法就是将表本身连接起来
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
我相信这会让你得到你想要的
SELECT *
FROM table
WHERE user_id IN
(SELECT DISTINCT user_id
FROM table
WHERE test_id = 5)
我相信这会让你得到你想要的
SELECT *
FROM table
WHERE user_id IN
(SELECT DISTINCT user_id
FROM table
WHERE test_id = 5)
试试这个查询
SELECT test data
FROM TABLENAME
WHERE user_id IN (
SELECT user_id
FROM TABLENAME
WHERE test_id = 5
)
试试这个查询
SELECT test data
FROM TABLENAME
WHERE user_id IN (
SELECT user_id
FROM TABLENAME
WHERE test_id = 5
)
听起来你想做一个自我加入。类似的方法将利用索引(假设您在
user\u id
上有一个索引,在test\u id
上有一个索引,您应该这样做):
我想这引出了另一个问题。您的表是如何索引的?只是数字主键?您通常希望在联接或WHERE子句中使用的所有列上都有索引。因此,您希望在
user\u id
上有一个索引,在test\u id
上有一个索引
用户可以多次参加相同的测试吗?如果没有,那么您希望通过在
user\u id
和test\u id
之间使用唯一的多列(“复合”)索引来限制这一点。然后为WHERE子句添加一个常规索引以测试id。类似的方法将利用索引(假设您在user\u id
上有一个索引,在test\u id
上有一个索引,您应该这样做):
我想这引出了另一个问题。您的表是如何索引的?只是数字主键?您通常希望在联接或WHERE子句中使用的所有列上都有索引。因此,您希望在
user\u id
上有一个索引,在test\u id
上有一个索引
用户可以多次参加相同的测试吗?如果没有,那么您希望通过在
user\u id
和test\u id
之间使用唯一的多列(“复合”)索引来限制这一点。然后在WHERE子句的test\u id
中添加一个常规索引。您的意思不仅仅是user\u id 5?你的第一句话和第二句话在我看来是矛盾的。你能再解释一下吗?@Mahesh如果用户参加了测试5,请返回该用户所有测试的所有测试结果。这就是我的理解。你的意思不仅仅是用户id 5?你的第一句话和第二句话在我看来是矛盾的。你能再解释一下吗?@Mahesh如果用户参加了测试5,请返回该用户所有测试的所有测试结果。这就是我对它的理解。这与-select*fromtest_id=5代码>。更简单的是,嵌套的select不如join操作有效,因为它对中的每一行执行一次嵌套的selectTABLENAME@Mahesh-您的查询没有返回他需要的结果。@AndrewR-可能我误解了OP。谢谢:)@jkschneider我不是MySql专家,但我认为在这种情况下,子查询只执行一次。这两个查询之间没有任何依赖关系,子查询中的WHERE有一个硬值。我没有解释过,但我认为这只是两个简单的查询代码>。更简单的是,嵌套的select不如join操作有效,因为它对中的每一行执行一次嵌套的selectTABLENAME@Mahesh-您的查询没有返回他需要的结果。@AndrewR-可能我误解了OP。谢谢:)@jkschneider我不是MySql专家,但我认为在这种情况下,子查询只执行一次。这两个查询之间没有任何依赖关系,子查询中的WHERE有一个硬值。我还没有解释清楚,但我认为这只是两个简单的查询。嵌套选择不如联接操作有效,因为它对TableName中的每一行执行一次嵌套选择。在这里,您可以将所有testdata绑定到用户。嵌套选择不如联接操作有效,因为它对TableName中的每一行执行一次嵌套选择TableName在这里您可以获得所有与用户相关的testdata。虽然这产生了与@AndrewR解决方案相同的结果,但您的解决方案执行起来稍微快一点。谢谢@维尼很乐意帮忙。我认为,随着用户数量和测试结果的大幅增长,速度上的差异将变得越来越明显。对于我的基本测试(大约1000条记录),由于使用了索引,这比其他建议的解决方案快一到两个数量级。虽然这产生了与@AndrewR解决方案相同的结果,但您的解决方案执行起来稍微快一点。谢谢@维尼很乐意帮忙。我认为,随着用户数量和测试结果的大幅增长,速度上的差异将变得越来越明显。对于我的基本测试(大约1000条记录),由于使用了索引,这比其他建议的解决方案快一到两个数量级。