选择UNION ALL和ORDER BY

时间:2015-06-02 06:26:35

标签: mysql sql

我尝试使用UNION ALL从几个表中进行查询,但是我在ORDER子句中遇到了这个错误:

  

#1054 - Unknown column 'Time' in 'order clause'

表格中有Time列。这是查询:

SELECT * from
(SELECT table, 'as'  from as
   UNION ALL
 SELECT table, 'as'  from as1
   UNION ALL
 SELECT table, 'as'  from as2
   UNION ALL
 SELECT table, 'as'  from as3) asAllWrong
 WHERE table not like 'as%' OR length(table) < 12
 ORDER BY Time='2015-06-02 9:00:00;

那么,我究竟是如何查询这些来向我显示这些表和这个表中的所有错误条目? 即使有一个名为Time的列?

,为什么我会收到此错误

编辑:我的错误是他们是不同的表,as1,as2 ......我想在那个时候查询所有错误的条目,就像我说的那样。

编辑:这就是现在的样子,到目前为止工作正常。请注意,这对我来说..不会进入任何生产,有时会被使用,所以我真的不需要性能......等等。

SELECT * from
( SELECT as.*, 'as'  from as
   UNION ALL
 SELECT as1.*, 'as1'  from as1
   UNION ALL
 SELECT as2.*, 'as2'  from as2
   UNION ALL
 SELECT as3.*, 'as3'  from as3) asAllWrong
 WHERE as not like 'as%' OR length(as) < 12
 ORDER BY Time='2015-06-02 9:00:00' ASC;

2 个答案:

答案 0 :(得分:2)

虽然查询看起来很混乱,但底线是您通过UNION ALL创建的结果内存表不包含字段Time,这就是您遇到错误的原因。

至于为什么它不在那里,通常你不能只是select {table_name}。它必须是列的列表。但我不是MySql的专家 - 它可能允许这样的诡计。正如Jonathan在下面提到的那样,你会更好:

select table.Time, 'as' from table
union all...

这肯定会将Time字段带入图片中。

答案 1 :(得分:1)

您还需要在选择

中指定Time
SELECT * from
(SELECT table, Time, 'as'  from as
   UNION ALL
 SELECT table, Time, 'as'  from as
   UNION ALL
 SELECT table, Time, 'as'  from as
   UNION ALL
 SELECT table, Time, 'as'  from as) asAllWrong
 WHERE table not like 'as%' OR length(table) < 12
 ORDER BY Time='2015-06-02 9:00:00' ASC/DESC;

这应该有用。

编辑:谢谢你指出我的错误。我只是用他的例子来展示它。

另外正如其他人所述,您可以使用select as.*, 'as' from as...,如果您需要,这将从as中选择所有字段。

您的ASC条款中可能还需要DESCORDER BYORDER BY默认按升序对记录进行排序。