可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

SQL: ORDER BY [列索引]

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

SQL-92 标准和大多数实现一直支持按列索引排序(尽管该功能已从 SQL-99 中移除!)。对于像这样的快速查询,它可能很有用

SELECT ID, FIRST_NAME || ' ' || LAST_NAME
FROM AUTHOR
ORDER BY 2;

以上等同于

SELECT ID, FIRST_NAME || ' ' || LAST_NAME
FROM AUTHOR
ORDER BY FIRST_NAME || ' ' || LAST_NAME;

但很容易看出,通过在投影中引入另一列,在索引为 2 的排序字段之前的任何位置,此查询可能会很快中断

-- Adding a column has broken the query
SELECT ID, LAST_UPDATE, FIRST_NAME || ' ' || LAST_NAME
FROM AUTHOR
ORDER BY 2;

或者,这些变体不会中断

-- The query is not affected by this change
SELECT ID, LAST_UPDATE, FIRST_NAME || ' ' || LAST_NAME
FROM AUTHOR
ORDER BY FIRST_NAME || ' ' || LAST_NAME;

-- Also, aliasing the expression (to avoid repetition) can work in many dialects
SELECT ID, LAST_UPDATE, FIRST_NAME || ' ' || LAST_NAME AS NAME
FROM AUTHOR
ORDER BY NAME;

虽然对于快速的临时查询,ORDER BY [列索引] 功能有时可能很有用,但通常最好避免使用该功能,尤其是在使用 jOOQ 时,这使得重用查询部分非常简单

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo