DUAL表
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
SQL 标准规定 FROM 子句 在 SELECT 语句 中是强制性的。 但是,在现实世界中,存在三种类型的数据库
- 始终需要
FROM
子句的数据库(SQL 标准的要求) - 从不需要
FROM
子句的数据库(并且仍然允许WHERE
子句) - 仅当有
WHERE
子句、GROUP BY
子句或HAVING
子句时才需要FROM
子句的数据库
使用 jOOQ,您无需担心上述 SQL 方言的区别。 jOOQ 从不需要 FROM
子句,但会在需要时呈现必要的 "DUAL"
表。 以下程序显示了 jOOQ 如何呈现 "DUAL"
表
请注意,某些数据库(H2、MySQL)通常可以不用"DUAL"
。 但是,在某些复杂的嵌套SELECT
语句的极端情况下,这会导致语法错误(或解析器错误)。 为了安全起见,jOOQ 将始终在这些方言中呈现 "dual"。
方言支持
此示例使用 jOOQ
select(inline(1))
翻译成以下特定方言的表达式
访问
SELECT 1 FROM ( SELECT count(*) dual FROM MSysResources ) AS dual
ASE, Aurora Postgres, BigQuery, ClickHouse, CockroachDB, Databricks, DuckDB, Exasol, H2, MariaDB, MySQL, Oracle, Postgres, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Trino, Vertica, YugabyteDB
SELECT 1
Aurora MySQL, MemSQL
SELECT 1 FROM DUAL
DB2
SELECT 1 FROM SYSIBM.DUAL
Derby
SELECT 1 FROM SYSIBM.SYSDUMMY1
Firebird
SELECT 1 FROM RDB$DATABASE
Hana, Sybase
SELECT 1 FROM SYS.DUMMY
HSQLDB
SELECT 1 FROM (VALUES (1)) AS dual (dual)
Informix
SELECT 1 FROM ( SELECT 1 AS dual FROM systables WHERE (tabid = 1) ) AS dual
Teradata
SELECT 1 FROM ( SELECT 1 AS "dual" ) AS "dual"
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!