在不同条件下多次加入同一个表是否正确?

时间:2013-08-02 22:57:17

标签: sql styles

我正在构建一个基于moodle(2.4)数据库的简单应用程序。 db是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上有所不同,这让我感到困扰。感觉我应该能够在一个子查询中执行此操作并将正确的信息提取到选择中 - 但我无法弄清楚如何执行此操作,或者这是否是正确的方法。

1 个答案:

答案 0 :(得分:2)

你的方法没有错。我个人总是选择加入子查询,我可能选择比“ln”和“lt”更有意义的别名,尽管