SQL multiple选择...其中id in和DISTINCT

时间:2013-08-18 23:24:02

标签: mysql sql select where-in

我正在MySQL数据库中的表上运行多个“where in in”子句的查询。我在每个查询中加入DISTINCT以尝试减少结果数量。仍然锁定了我的MySQL表。我不知道的任何故障,或者我应该尝试摆脱一些DISTICT?只需要第一个DISTINCT。

   SELECT DISTINCT id, name 
   FROM TP_Test_Info 
   WHERE id IN (SELECT DISTINCT test_id 
                FROM TP_Test_Sections 
                WHERE id IN (SELECT DISTINCT section_id 
                             FROM TP_Test_Questions 
                             WHERE id IN (SELECT DISTINCT question_id 
                                          FROM TP_Student_Answers 
                                          WHERE student_id = 751)))

最后一张表TP_Student_Answers有大约32,000个条目。其余的要小得多。

我意识到我应该将大表中的一些行编入索引。把它隔开。还有其他问题吗?

1 个答案:

答案 0 :(得分:1)

您应该使用joins并考虑至少在foreign keys

上创建索引

尝试以下

SELECT DISTINCT TP_Test_Info.id, TP_Test_Info.name
FROM TP_Test_Info
JOIN TP_Test_Sections 
  ON TP_Test_Sections.test_id = TP_Test_Info.id
JOIN TP_Test_Questions 
  ON TP_Test_Questions.section_id = TP_Test_Sections.id
JOIN TP_Student_Answers 
  ON TP_Student_Answers.question_id = TP_Test_Questions.id
WHERE TP_Student_Answers.student_id = 751