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

  • 相关阅读:
    React 官网列子学习
    阿里云图片裁剪
    Android list加载图片工具类
    Java 反射
    Android 调节图片工具类
    Android 设置资源字体,屏幕截图
    android 跨进程通讯 AIDL
    android sdk api结构解析
    android学习之activity
    驱动进阶1
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/14485787.html
Copyright © 2011-2022 走看看