#1054订单子句中的未知列

时间:2015-06-27 12:10:52

标签: mysql

我正在尝试将我的数据库表直接导出到csv文件中但得到了 错误如下

  

1054 - 未知专栏' callstart'在'订单条款'

SELECT 'Date','callerid','Called Number','Code','Destination'
UNION ALL 
SELECT 
  CONVERT_TZ(`callstart`,'+00:00','+02:00') as call_date, 
  callerid, callednum, pattern, notes 
FROM (cdrs) 
WHERE `callstart` >= '2015-06-12 00:00:01' 
  AND `callstart` <= '2015-06-13 23:59:59' 
  AND `parent_id` = '0' 
ORDER BY callstart DESC 
INTO OUTFILE '/tmp/2015-06-27-11-28-47.csv' 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ';

CDRS表:

Field Name | Datatype   |Null 
-----------------------------
callstart  | datetime   |No
callerid   | varchar(30)|No
callednum  | varchar(30)|No
pattern    | varchar(20)|No
notes      | varchar(80)|NO
parent_id  | int(11)    |NO

cdrs表已经有callstart字段,但为什么我得到这个我不知道

注意:
如果我将在UNION ALL Query之前删除然后它工作正常,但我已导出此查询与标题所以我只是添加UNION所以如果有任何其他方式我可以从数据库手动添加标题然后它也会很好但序列字段不得更改

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果没有解释,您的查询会有点混乱。您希望将行标题放入outfile中,这就是您在第一个查询中使用单引号的原因。这可能会做你想要的:

SELECT 'Date', 'callerid', 'Called Number', 'Code', 'Destination'
UNION ALL 
(SELECT CONVERT_TZ(`callstart`,'+00:00','+02:00') as call_date, callerid, 
        callednum, pattern, notes
 FROM cdrs
 WHERE `callstart` >= '2015-06-12 00:00:01' AND 
       `callstart` <= '2015-06-13 23:59:59' AND `parent_id` = '0'
 ORDER BY callstart DESC
)
INTO OUTFILE '/tmp/2015-06-27-11-28-47.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ';

一些解释。您的ORDER BYUNION ALL的结果,而不是第二个子查询的结果。它正在寻找第一个子查询中的列名 - 而且没有。

您只希望对第二个子查询进行排序,因此请使用括号和ORDER BY仅用于该子查询。

注意:在实践中,这将起作用,但它取决于写入语句的顺序从UNION ALL返回的结果。据我所知,大多数数据库都这样做。但是,很难找到保证这种处理顺序的文档(Postgres在文档方面是最好的)。