• 使用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中中不会有空值。尽管包含有其他值,任何这样的值都会让原始查询根本不会返回结果。

  • 相关阅读:
    SQL注入方法之:获取列名
    手把手教会你模拟退火算法
    我的G++编译选项
    编译器优化误解程序员的意思
    ZKW线段树
    扩展欧几里得算法
    快速幂
    乘法取模
    莫队算法良心讲解
    高精度模板
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/14485787.html
Copyright © 2020-2023  润新知