使用多个表中的多个JOIN进行选择

时间:2019-05-08 17:21:29

标签: mysql mariadb

我在网页上有一个时间表编辑器,我需要通过使用CLASS ID来选择时间表,并通过USER.CLASS ID = CLASS ID在该类别中的所有用户来选择TIMETABLE,然后从这些用户中获得具有GROUP ID和获取具有组ID的所有时间表。对不起,我的解释知识。

用户通过cid链接到类。 userGroup只是uid和gid。 时间表同时包含cid和gid。当first为null时,给出第二个。

我在下面尝试了代码,以及所有似乎无法正常工作的所有JOIN的组合

SELECT DISTINCT
    `timetable`.*,
    `group`.name AS groupName,
    `class`.name AS className
FROM
    `timetable`,
    `user`,
    `userGroup`
LEFT OUTER JOIN `group` ON `userGroup`.gid = `group`.gid
LEFT OUTER JOIN `class` ON `class`.cid = '1'
WHERE
    `user`.cid = 1 AND `userGroup`.uid = `user`.uid AND(
        `timetable`.gid = `group`.gid OR `timetable`.cid = '1'
    )

我希望输出3个时间表。 1个来自班级,2个来自不同组,这些组分别连接到按班级连接的用户。我还希望使用受尊重的ID(例如,gid,cid)来自GROUP的名称和来自CLASS的名称。如果cid为null,是否还有办法在className上获取NULL?

1 个答案:

答案 0 :(得分:0)

我遵循@ spencer7593的建议,仅使用“新语法” JOIN。

SELECT DISTINCT
    `timetable`.*,
    `group`.name AS groupName,
    `class`.name AS className
FROM
    `timetable` 
JOIN `user` ON `user`.cid = 1
JOIN `userGroup` ON `userGroup`.uid = `user`.uid
LEFT JOIN `group` ON `userGroup`.gid = `group`.gid AND `timetable`.cid IS null
LEFT JOIN `class` ON `class`.cid = '1' AND `timetable`.gid IS null
WHERE
    `timetable`.gid = `userGroup`.gid OR `timetable`.cid = '1'