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

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

反馈

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

The jOOQ Logo