IN谓词
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
在 SQL 中,除了将一个值与多个值进行比较之外,IN
谓词还可以用于创建半连接或反连接。 jOOQ 在 org.jooq.Field
接口上提供了以下方法,用于构造此类 IN
谓词
in(Collection<?>) // Construct an IN predicate from a collection of bind values in(T...) // Construct an IN predicate from bind values in(Field<?>...) // Construct an IN predicate from column expressions in(Select<? extends Record1<T>>) // Construct an IN predicate from a subselect notIn(Collection<?>) // Construct a NOT IN predicate from a collection of bind values notIn(T...) // Construct a NOT IN predicate from bind values notIn(Field<?>...) // Construct a NOT IN predicate from column expressions notIn(Select<? extends Record1<T>>) // Construct a NOT IN predicate from a subselect
一个 IN
谓词的示例可能如下所示
TITLE IN ('Animal Farm', '1984') TITLE NOT IN ('Animal Farm', '1984')
BOOK.TITLE.in("Animal Farm", "1984") BOOK.TITLE.notIn("Animal Farm", "1984")
NOT IN 和 NULL 值
请注意,您可能不应该在 NOT IN
谓词的右侧有任何 NULL
值,因为整个表达式将评估为 NULL
,这很少是期望的结果。 这可以使用以下推理来非正式地显示
-- The following conditional expressions are formally or informally equivalent A NOT IN (B, C) A != ANY(B, C) A != B AND A != C -- Substitute C for NULL, you'll get A NOT IN (B, NULL) -- Substitute C for NULL A != B AND A != NULL -- From the above rules A != B AND NULL -- [ANY] != NULL yields NULL NULL -- [ANY] AND NULL yields NULL
val("TITLE").in(select(BOOK.TITLE).from(BOOK))
翻译成以下特定方言的表达式
所有方言
'TITLE' IN ( SELECT BOOK.TITLE FROM BOOK )
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!