2012-12-05 52 views
3

是否可以從MYSQL中的兩個別名的其餘部分創建第三個別名?從MYSQL中兩個別名的其餘部分創建第三個別名?

這裏是我的查詢:

SELECT DISTINCT 
workcards.task, 
workcards.program, 
workcards.zone, 
workcards.CYLcomp, 
workcards.CYLint, 
workcards.task, 
workcards.CYLcomp + workcards.CYLint AS nextdue, 
workcards.wcnumber, 
(SELECT airtimes.total_cycles 
     FROM airtimes 
     WHERE airtimes.nnumber='xxxxx' 
     ORDER BY airtimes.total_cycles DESC LIMIT 1) AS current_cycle 
FROM workcards 
WHERE basis LIKE '%CYL%' 
AND nnumber='xxxxx' 
ORDER BY CASE nextdue 
WHEN 0 THEN 1 ELSE -1 END ASC, nextdue ASC 

我想要做的就是創建第三別名這將是「nextdue」減「current_cyle」別名的區別?例如:

nextdue - current_cycle AS remainder? 

對不起,如果noob或任何。

感謝

回答

1

不能使用計算結果別名select部分與其他計算中使用(http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html) 。但你可以通過重建你的查詢來得到你想要的,所以它會使用連接和分組:

SELECT DISTINCT 
    w.*, 
    w.CYLcomp + w.CYLint AS nextdue, 
    MAX(a.total_cycles) AS current_cycle 
    w.CYLcomp + w.CYLint - MAX(a.total_cycles) AS reminder 
FROM workcards w 
JOIN airtimes a ON a.nnumber = w.nnumber 
WHERE w.basis LIKE '%CYL%' AND w.nnumber='xxxxx' 
GROUP BY w.nnumber 
ORDER BY CASE nextdue WHEN 0 THEN 1 ELSE -1 END ASC, nextdue ASC 
+0

這個工作,但只返回一個結果,我有幾千個任務要跟蹤。我認爲這與使用MAX有關,這就是爲什麼我正在研究使用別名列。我會更深入地研究這一點,但在閱讀完鏈接後,我想我需要以不同的方式來處理這個問題。我非常感謝你的幫助。謝謝。 – mattymattmatt

+0

如果您可以描述這些表格並提供一些測試數據,這將有所幫助。 – piotrekkr