使用SQL Server时必须注意的10个特性:IN中的多重字段

日期: 2013-09-16 作者:Alex Bolenok 来源:TechTarget中国

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

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐