2013-08-02 30 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将会在今天将子查询转换为连接。 –

相关问题