【发布时间】:2018-11-28 21:10:26
【问题描述】:
我在 MySQL 中有以下查询:
(SELECT ue.id, ue.userid, ue.status, ue.timestart, ue.timeend, e.courseid,
e.id AS enrolid, ra.roleid
FROM user_enrolments ue
JOIN enrol e ON e.id = ue.enrolid
JOIN course c ON c.id = e.courseid
JOIN user u ON u.id = ue.userid
JOIN context ct ON ct.instanceid = c.id
LEFT JOIN role_assignments ra ON ra.userid = u.id AND
ra.contextid = ct.id AND
ra.itemid = e.id
WHERE e.customint1 = 1 AND u.deleted = 0 AND
ct.contextlevel = 50 AND (ue.status = 0 OR ue.status = 1))
UNION
(SELECT de.enrolid AS id, de.userid, de.status, de.date_ini, de.date_fin,
de.courseid, de.enrolid, de.roleid
FROM deleted_enrols de
JOIN user u ON u.id = de.userid
WHERE userid = ANY (SELECT userid FROM local_users WHERE clientid = 1))
ORDER BY u.firstname, u.lastname, c.fullname LIMIT 0, 100
如果我删除 ORBER BY 和 LIMIT,这个查询可以正常工作...但是 ORDER BY 子句给出错误:
Table 'u' from one of the SELECTs cannot be used in global ORDER clause
如果我删除两个 SELECT 查询的括号,错误是不同的:
Table 'u' from one of the SELECTs cannot be used in field list
我也尝试过 UNION ALL,但它也不起作用。
有什么建议或线索吗?提前感谢您的宝贵时间...
【问题讨论】:
-
问题在于别名的范围。 “U”在您尝试使用它的地方不存在。
标签: mysql sql sql-order-by union