2010-09-01 27 views
3

在审查了相关的问题后,他们都没有看到我的地址,所以在这里:更快的MySQL加入DISTINCT记录

我有两个包含课程信息的表。目前,一个表格[课程]包含近25000条记录,其中包含CourseName,CourseCode,Term,Instructor等字段。第二个表[courseCatalog]仅包含CourseCode和CourseName。

我的应用程序允许用户拉起一位教师并批准他们被允许教授的列表中的课程。

我使用自动建议(jQuery Ajax Object - > PHP文件 - > MySQL并返回)构建了一个搜索来查找课程。当他们返回时,用户可以点击该课程来标记(另一个Ajax调用PHP &MySQL)它作为教师批准的课程。

的问题是,存在较大的表中的一些课程,是不是在较小的表,反之亦然(消除这个问题是基于这样的数据其实来自一个更难的问题,我离题)

如果我加入任何特定领域的表格,某些课程将被忽略。左加入似乎仍然产生相同的问题,因为我被迫加入一个领域。

如果我只是打电话给两个表:

SELECT DISTINCT course.CourseCode, course.CourseName 
FROM course, courseCatalog 

查询需要永远这使得搜索功能无用的,因为它需要长期加载建议。

我想获得的课程DISTINCT列表,以便它们是否会出现在“课程”表或“courseCatalog”表......非常草率:)

有什么建议?我忽略了一些简单的东西吗?谢谢所有

回答

2

您说的查询需要永久执行完全冗余的笛卡尔连接,您将生成一个额外的行的整个负载(行数乘以CourseCatalog中的行数),然后再使用DISTINCT给你留下course表的原始内容。 (结果与SELECT DISTINCT CourseCode, CourseName FROM course相同)

要从两个表中获得不同的CourseCodes和CourseNames列表,您可以使用UNION运算符。

SELECT CourseCode, CourseName 
FROM course 
UNION /*Will ensure DISTINCTness*/ 
SELECT CourseCode, CourseName 
FROM courseCatalog 
ORDER BY CourseCode, CourseName 
+0

美丽的,我确定有一些操作符或语法可以消除这一点,现在它开始闪现。感谢Martin – d2burke 2010-09-01 14:44:55