2013-08-02 32 views
1

我正在構建一個基於moodle(2.4)數據庫的簡單應用程序。數據庫是MySQL 5.1.69在不同的條件下多次連接相同的表格是否正確?

我需要找到本月授予的所有證書以及有關獲得證書和證書本身的用戶的所有相關信息。

,因爲它代表我的SQL是:

SELECT u.lastname, u.firstname, ln.data, lt.data, course.fullname, 
    c.printhours, from_unixtime(i.timecreated) AS issued, 
    substring_index(c.customtext, ' ', -1) AS approval 
FROM mdl_certificate_issues AS i 
INNER JOIN mdl_certificate AS c ON i.certificateid = c.id 
INNER JOIN mdl_user AS u on i.userid = u.id 
INNER JOIN mdl_course AS course ON c.course = course.id 
INNER JOIN mdl_user_info_data AS ln ON i.userid = ln.userid AND ln.fieldid = 1 
INNER JOIN mdl_user_info_data AS lt ON i.userid = lt.userid AND lt.fieldid = 2 
WHERE i.timecreated >= unix_timestamp('2013-07-01') 
    AND i.timecreated < unix_timestamp('2013-08-01') 

說我加入同一個表(mdl_user_info_data)的兩倍(如LT和LN),並使用相同的列,但僅在fieldid不同的事實是什麼困擾我。感覺就像我應該可以在一個子查詢中做到這一點,並將正確的信息輸入到select中 - 但我無法弄清楚如何去做,或者甚至是正確的方法。

回答

2

您的方法沒有任何問題。就我個人而言,我總是選擇加入子查詢,我可能會選擇比「ln」和「lt」更有意義的別名,儘管

+0

由於某些原因,在有多種方式可以執行時,很難找到直接的sql樣式建議東西 - 非常感謝。 –

+0

聯合與子查詢通常更像是一種優於風格的優化問題。儘管大多數DBMS將會在今天將子查詢轉換爲連接。 –

相關問題