簡體   English   中英

MySQL-此查詢出了什么問題?

[英]MySQL - what is wrong with this query?

我正在運行此查詢並出現錯誤:

select mst_machine.MachineName, 
  FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') as dataTimeStamp,     
  trn_dacs.TargetWeight as dataValue, 
  trn_dacs.Weight 
FROM trn_dacs 
  INNER JOIN mst_machine ON trn_dacs.MachineNo = mst_machine.MachineNo 
where dataTimeStamp >= '1/31/2018 7:21:16 AM'

錯誤是:

1054-“ where子句”中的未知列dataTimeStamp

我對MySQL的了解不如對SQL Server的了解。 我敢肯定我以前在SQL Server中已經做到這一點。

沒有where子句,查詢運行正常,並且列標題確實正確顯示了dataTimeStamp。 (僅供參考)。

另外-我知道我可以通過用trn_dacs.DateTime代替dataTimeStamp來做到這一點,但是,我需要為該時間戳使用別名,以便始終可以為任何表結構自動生成where子句。

您不能在where子句中使用別名,請使用:

WHERE FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') >= '1/31/2018 7:21:16 AM'而不是: where dataTimeStamp >= '1/31/2018 7:21:16 AM'

就像其他人在評論中提到的那樣,您不能在WHERE子句中使用SELECT子句中的列別名。

您可以使用的一種技巧是使用HAVING子句而不是WHERE子句。 這不一定會很好地執行(因為MySQL無法使用索引來滿足過濾要求),但是據我所知,它可以滿足您的要求:

select mst_machine.MachineName, 
  FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') as dataTimeStamp,     
  trn_dacs.TargetWeight as dataValue, 
  trn_dacs.Weight 
FROM trn_dacs 
  INNER JOIN mst_machine ON trn_dacs.MachineNo = mst_machine.MachineNo 
HAVING dataTimeStamp >= '2018-01-31 07:21:16'

另一個選擇是使用WHERE子句中的列,並將函數應用於您用於過濾的時間戳。 這可能會更好,因為MySQL可以使用索引(如果有)進行過濾:

select mst_machine.MachineName, 
  FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') as dataTimeStamp,     
  trn_dacs.TargetWeight as dataValue, 
  trn_dacs.Weight 
FROM trn_dacs 
  INNER JOIN mst_machine ON trn_dacs.MachineNo = mst_machine.MachineNo 
WHERE trn_dacs.DateTime >= unix_timestamp('2018-01-31 07:21:16')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM