我尝试使用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;
答案 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
条款中可能还需要DESC
或ORDER BY
。 ORDER BY
默认按升序对记录进行排序。