mysql union 出错_ORDER BY子句在MySQL中使用UNION时出错(Error with ORDER BY clause using UNION in MySQL)...
ORDER BY子句在MySQL中使用UNION時出錯(Error with ORDER BY clause using UNION in MySQL)
我在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,但它也不起作用。
任何建議或線索? 在此先感謝您的時間...
I have the following query in 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
If I delete ORBER BY and LIMIT, this query works fine... but the ORDER BY clause gives an error:
Table 'u' from one of the SELECTs cannot be used in global ORDER clause
If I delete the parentheses of both SELECT querys, the error is different:
Table 'u' from one of the SELECTs cannot be used in field list
I have also tried with UNION ALL, but it does not work either.
Any suggestion or clue? Thanks in advance for your time...
原文:https://stackoverflow.com/questions/50936278
更新時間:2019-11-29 17:36
最滿意答案
UNION的結果不包含表'u'中的任何字段,因此這些結果不能按表'u'字段排序。
你也許可以執行UNION,然后將結果重新連接到表'u',然后用表'u'字段對結果進行排序。 在course.fullname上進行排序也存在類似問題,因此也需要重新加入。
SELECT x.id, x.userid, x.status, x.timestart, x.timeend, x.courseid, x.enrolid, x.roleid
FROM ((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))
) x
JOIN user z ON z.id = x.userid
JOIN course d ON d.id = x.courseid
ORDER BY z.firstname, z.lastname, d.fullname LIMIT 0, 100
The results of your UNION do not include any fields from table 'u', so those results cannot be sorted by table 'u' fields.
You could perhaps perform the UNION and then re-join the results to table 'u', and then use that to sort the results by table 'u' fields. A similar issue exists for sorting on course.fullname, so that would need to be joined back in, too.
SELECT x.id, x.userid, x.status, x.timestart, x.timeend, x.courseid, x.enrolid, x.roleid
FROM ((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))
) x
JOIN user z ON z.id = x.userid
JOIN course d ON d.id = x.courseid
ORDER BY z.firstname, z.lastname, d.fullname LIMIT 0, 100
2018-06-20
相關問答
潛在的障礙是SQL數據集本質上是無序的。 只要您使用UNION兩個數據集,就會失去先前存在的訂購保證。 您通常可以使用以下結構,但仍然無法保證...... SELECT
*
FROM
(
(
select to_char(first_name||'('||substr(last_name,0,1)||')')
from employees
order by first_name
)
Individuals
...
您可以通過在每個選擇中添加一個名為rank的偽列,您可以先排序,然后再按其他條件進行排序,例如: select *
from (
select 1 as Rank, id, add_date from Table
union all
select 2 as Rank, id, add_date from Table where distance < 5
union all
select 3 as Rank, id, add_date from Table
...
UNION的結果不包含表'u'中的任何字段,因此這些結果不能按表'u'字段排序。 你也許可以執行UNION,然后將結果重新連接到表'u',然后用表'u'字段對結果進行排序。 在course.fullname上進行排序也存在類似問題,因此也需要重新加入。 SELECT x.id, x.userid, x.status, x.timestart, x.timeend, x.courseid, x.enrolid, x.roleid
FROM ((SELECT ue.id, ue.userid, ue.
...
我認為最好使用子查詢: SELECT *
FROM (SELECT NULL AS ID, '--None--' AS DSC
UNION ALL
SELECT MSP_NM AS ID, MSP_TITLE AS DSC
FROM MST_PAGE
WHERE MSP_STS = 'ACTIVE'
) t
ORDER BY ID;
你需要'ACTIVE'周圍'ACTIVE'引號,你可以在沒有子查詢的情況下運行查詢 - 我只是認為子查詢澄
...
現在更多地看一下這個。 我認為你基本的查詢可以消除這樣的一些IN子句(但這不會起作用) SELECT e.entity_id,
GROUP_CONCAT((SELECT DISTINCT z.full_name FROM user z INNER JOIN entity_action ea ON z.id = ea.personnel_id WHERE ea.entity_id = e.id AND ea.action_type = 'some_action') ORDER BY
...
您可以使用用戶定義的變量為每個單獨的查詢提供排名,因此第一行查詢1的排名為1,類似地,第二行查詢的第一行排名為1,然后是2,3,依此類推,然后排序這個行號的結果 SELECT bsb.ID AS meta_id, bsb.ORDER_ID AS order_item_id, '_product_id' AS meta_key, bsb.PRODUCT_ID AS meta_value, 1 AS origin
,@r:= @r +1 AS `row`
FROM b_sale_basket bsb,
...
看起來我明白了! PREPARE STMT FROM " SELECT * FROM tab_1 WHERE predict_var = '4' or predict_var = '2' union
(SELECT * FROM tab_1 WHERE predict_var = '0' or predict_var = '1' limit ? ) ORDER BY RAND() " ;
EXECUTE STMT USING @sample; # fetches a total of 13,
...
嘗試: $getquery = "(SELECT *
FROM highscore
WHERE score >= '$score'
ORDER BY score ASC
LIMIT 6)
UNION ALL -- guaranteed to be beneficial in this case as Johan commented
(SELECT *
FROM highscore
WHERE score < '$score'
ORDER BY score DESC
LIMIT 5)";
...
該聲明 select * from (select * from dual order by 1)
根本沒有明確的訂單。 只有最外層的ORDER BY在SQL中生效(除非設置了行限制)。 如果你仍然碰巧在查詢結果中觀察到順序,那么這可能隨時會消失。 在聲明中 select * from dual
union all
select * from dual order by 1
order by附加到union all ,而不是第二個select 。 因此,它是頂級的,定義明確的。 使用最后一個表
...
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql union 出错_ORDER BY子句在MySQL中使用UNION时出错(Error with ORDER BY clause using UNION in MySQL)...的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: folders默认配置 shell_更改
- 下一篇: mysql-nt.exe w3wp.ex
