大多數數據庫都有類似GREATEST
函數,這可能會有用一些。至少這些數據庫沒有這樣的功能:如何模擬Sybase ASE中的GREATEST()?
- 德比
- SQL服務器
- Sybase ASE的
- Sybase SQL Anywhere的
對於SQL Server和Sybase SQL Anywhere的,在函數可以使用子查詢和UNION ALL
進行模擬,可以在this question here中看到。例如:
-- SELECT GREATEST(field1, field2, field3) FROM my_table
SELECT (SELECT MAX(c) FROM
(SELECT my_table.field1 AS c UNION ALL
SELECT my_table.field2 UNION ALL
SELECT my_table.field3) T) AS greatest
FROM my_table
但是這在Sybase ASE中不起作用。顯然,子查詢不能訪問外部查詢的my_table
引用。我得到的錯誤是
列前綴'my_table'與查詢中使用的表名或別名不匹配。無論是在FROM子句中未指定該表,還是必須使用相關名稱
請注意,Sybase SQL Anywhere不會出現此問題。任何想法這裏有什麼問題以及如何重新編寫查詢?
我想避免
- 存儲功能,我可以不具有必要的補助來創建它們
- 冗長
CASE
表達式,與所需的所有比較的組合排列的表達長度嵌套0表達至少O(n^2)
時n
是參數GREATEST
MySQL有與導出表同樣的限制,以及(儘管中當然它確實有'最好'的功能!)。 – 2012-01-11 20:09:57
@MartinSmith:你說的對,我只是試過用MySQL ...有趣的... – 2012-01-11 20:14:50