2010-09-01 63 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