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

DISTINCT谓词

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

一些数据库支持 DISTINCT 谓词,它是一个方便的,NULL 安全的 比较谓词。 使用 DISTINCT 谓词,可以假定以下真值表

  • [ANY] IS DISTINCT FROM NULL 产生 TRUE
  • [ANY] IS NOT DISTINCT FROM NULL 产生 FALSE
  • NULL IS DISTINCT FROM NULL 产生 FALSE
  • NULL IS NOT DISTINCT FROM NULL 产生 TRUE

例如,您可以比较两个字段的独特性,忽略任何一个字段可能是 NULL 的事实,这可能会导致有趣的结果。 jOOQ 支持这种方式

TITLE IS DISTINCT FROM SUB_TITLE
TITLE IS NOT DISTINCT FROM SUB_TITLE
BOOK.TITLE.isDistinctFrom(BOOK.SUB_TITLE)
BOOK.TITLE.isNotDistinctFrom(BOOK.SUB_TITLE)

方言支持

此示例使用 jOOQ

AUTHOR.FIRST_NAME.isDistinctFrom(AUTHOR.LAST_NAME)

翻译成以下特定方言的表达式

ASE, Exasol, SQLDataWarehouse, Vertica

NOT EXISTS (
  SELECT AUTHOR.FIRST_NAME x
  INTERSECT
  SELECT AUTHOR.LAST_NAME x
)

Aurora MySQL, MariaDB, MemSQL, MySQL

(NOT(AUTHOR.FIRST_NAME <=> AUTHOR.LAST_NAME))

Aurora Postgres, BigQuery, CockroachDB, DB2, Databricks, DuckDB, Firebird, H2, HSQLDB, Postgres, Redshift, SQLServer, Snowflake, Trino, YugabyteDB

AUTHOR.FIRST_NAME IS DISTINCT FROM AUTHOR.LAST_NAME

ClickHouse

arrayUniq(ARRAY(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)) = 2

Derby

NOT EXISTS (
  SELECT AUTHOR.FIRST_NAME x
  FROM SYSIBM.SYSDUMMY1
  INTERSECT
  SELECT AUTHOR.LAST_NAME x
  FROM SYSIBM.SYSDUMMY1
)

Hana, Sybase

NOT EXISTS (
  SELECT AUTHOR.FIRST_NAME x
  FROM SYS.DUMMY
  INTERSECT
  SELECT AUTHOR.LAST_NAME x
  FROM SYS.DUMMY
)

Informix

NOT EXISTS (
  SELECT AUTHOR.FIRST_NAME x
  FROM (
    SELECT 1 AS dual
    FROM systables
    WHERE (tabid = 1)
  ) AS dual
  INTERSECT
  SELECT AUTHOR.LAST_NAME x
  FROM (
    SELECT 1 AS dual
    FROM systables
    WHERE (tabid = 1)
  ) AS dual
)

Oracle

decode(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, 1, 0) = 0

SQLite

(AUTHOR.FIRST_NAME IS NOT AUTHOR.LAST_NAME)

Teradata

NOT EXISTS (
  SELECT AUTHOR.FIRST_NAME x
  FROM (
    SELECT 1 AS "dual"
  ) AS "dual"
  INTERSECT
  SELECT AUTHOR.LAST_NAME x
  FROM (
    SELECT 1 AS "dual"
  ) AS "dual"
)

访问

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

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

The jOOQ Logo