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)...相关推荐

  1. linux线程出错,在线程应用程序(linux,pthreads)中读取文件大小时出错

    我试图从Linux中的文件夹中读取所有文件和目录,其线程为 获取最大文件大小&当前目录和当前目录树下的名称.在线程应用程序(linux,pthreads)中读取文件大小时出错 主线程扫描基本目 ...

  2. column ambiguously defined oracle数据库分页语句查询中select嵌套时出错

    column ambiguously defined &oracle数据库分页语句查询中select嵌套时出错 转载于 [ lev草梦的博客](http://blog.sina.com.cn/ ...

  3. oracle写入导出文件时出错,帮忙!EXP-00015:错误!EXP-00002: 写入导出文件时出错

    今天在同一个目录下做Release 9.2.0.6.0EXP导出,导了几个小表没问题,但是大点的上万条记录的表就有问题 1:小表正常: GXdbC% exp c_perf/gxcperf@gxdbc ...

  4. win7与internet时间同步出错_win7系统同步internet时间总提示“同步时出错”的解决方法...

    很多小伙伴都遇到过win7系统同步internet时间总提示"同步时出错"的困惑吧,一些朋友看过网上零散的win7系统同步internet时间总提示"同步时出错" ...

  5. mysql 创建触发器出错_mysql-在phpmyadmin中创建触发器时出错

    我创建了非常简单的触发器,我认为syntex也正确: CREATE TRIGGER trig1 after INSERT ON urlcontent for each row BEGIN insert ...

  6. mysql 至少有2个年龄大于40岁,在MySQL中计算年龄时出错?

    I am trying to calculate age with the SQL statement below round(datediff(now() - dateofbirth / 365)) ...

  7. 从存储区提供程序的数据读取器中进行读取时出错_三菱伺服控制程序写法破析...

    1.原点回归程序示例: M1250原点回归启动按键 Y50  定位启动 (伺服参数) Y44  轴停止 (伺服参数) Y40  PLC准备完成 (伺服参数) M1081  电机手动状态 M6401  ...

  8. android pjsip 2.5编译,在Android中构建PJSiP时出错

    我相信你现在已经过去了,但对于找到这个帖子的其他人来说: 只需将NDK_TOOLCHAIN_VERSION环境变量设置为4.9 这可以通过在configure调用之前执行导出来完成: export N ...

  9. python装keras_python – 在anaconda中安装keras时出错. / p KER...

    我在anaconda中创建了一个新的env,在安装spyder,tensorflow和theano后我试图安装keras但是我收到了一条错误消息(见下文).现在我甚至无法打开spyder,因为它停止工 ...

最新文章

  1. RTD 比率式温度测量传感器设计思路
  2. 异步编程之Promise(2):探究原理
  3. Python:如何仅用递归函数和栈操作逆序一个栈
  4. SysErrorMessage 函数和系统错误信息表
  5. java集合(1)-概述
  6. 超级楼梯HDU2041
  7. SpringFramework核心技术一(IOC:详细的依赖和配置)
  8. 推荐 :小米用户画像实战(附48页PPT)
  9. 简单的STM32汇编程序
  10. ArcGIS学习总结(三)——空间分析基本操作
  11. 离别,总免不了有些悲伤
  12. unity 打安卓包 华为手机图片被压扁
  13. 极路由 刷linux,极路由极壹HC6361刷OpenWrt固件教程
  14. 罗丹明PEG罗丹明,RB-PEG-RB
  15. python3 规则引擎_Ilog、Drools、Jess规则引擎的Rule Language 对比
  16. CNN实现文本情感分类
  17. 杰理之BQB 的 RF 测试【篇】
  18. 基于C#制作一个桌面宠物
  19. ZZULIOJ1166: 实数取整(指针专题)
  20. 2020年7月大学英语六级作文

热门文章

  1. 提取某一个镇的行政边界_接口测试:A04_HttpRunner通用_02_提取数据_02_regex方式
  2. 能用python做信号处理吗_Python中的信号处理
  3. Altium Designer 21 最全快捷键 分享 共1000多个|电子设计效率提高全靠它
  4. 自己动手写CPU(5)简单算术操作指令实现_1
  5. wincc与第三方软件opc通讯_WinCC与第三方系统数据交互—IndustrialDataBridge
  6. 常熟理工学院计算机网络基础,常熟理工学院计算机网络复习题之简答题
  7. 浏览器打开出现证书错误_浏览器安全证书过期怎么办
  8. 完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)
  9. share with用法
  10. 伪分布式hbase数据迁移汇总