[英]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.