zoukankan      html  css  js  c++  java
  • 使用SQL Server时必须注意的10个特性:IN中的多重字段

    你不能在IN中使用多个字段。如下查询:

    SELECT *

    FROM mytable

    WHERE (col1, col2) IN

    (

    SELECT col1, col2

    FROM othertable

    )

    这不会正常工作。

    这一行为违反了标准并且是特定于SQL Server的。要解决这一问题,可以用EXISTS来代替IN如下:

    SELECT *

    FROM mytable m

    WHERE EXISTS

    (

    SELECT NULL

    FROM othertable o

    WHERE o.col1 = m.col1

    AND o.col2 = m.col2

    )

    值得注意的是,这仅适用于IN,而非NOT IN。

    NOT IN与NOT EXISTS在处理空值的方式上略有不同。

    要模仿这一包含NOT IN的查询如下:

    SELECT *

    FROM mytable m

    WHERE (col1, col2) NOT IN

    (

    SELECT col1, col2

    FROM othertable

    )

    我们必须使用以下查询:

    SELECT *

    FROM mytable m

    WHERE NOT EXISTS

    (

    SELECT NULL

    FROM othertable o

    WHERE o.col1 = m.col1

    AND o.col2 = m.col2

    )

    AND NOT EXISTS

    (

    SELECT NULL

    FROM othertable o

    WHERE o.col1 IS NULL

    OR

    o.col2 IS NULL

    )

    第二个谓词确保othertable 在col1和col2中中不会有空值。尽管包含有其他值,任何这样的值都会让原始查询根本不会返回结果。

  • 相关阅读:
    自学Java0711
    自学Java0710
    自学Java0709
    自学Java0708
    Leetcode刷题集
    网站收集
    674. 最长连续递增序列『简单』
    680. 验证回文字符串 Ⅱ『简单』
    686. 重复叠加字符串匹配『简单』
    693. 交替位二进制数『简单』
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/14485787.html
Copyright © 2011-2022 走看看