大多数数据库都有类似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