SQLServer中IN產生的BUG

2021-08-18 09:21:48 字數 1266 閱讀 2616

use tempdb

goif object_id('t1') is not null drop table t1

if object_id('t2') is not null drop table t2

gocreate table t1(id int)

create table t2(id int)

goinsert into t1 values (1)

insert into t1 values (2)

insert into t1 values (3)

--insert into t1 values (null)

goinsert into t2 values (1)

insert into t2 values (2)

insert into t2 values (4)

insert into t2 values (null)

go--t1 表中無null 值,可正常顯示。有null, null 也出不來

select * from t1 where id in (select id from t2)

/*id12

*/--t1 表中有無null 值,都顯示不了。t2無null值才可正常顯示

select * from t1 where id not in (select id from t2)

/*id

*/insert into t1 values (null)

select * from t1 where exists(

select 1 from t2 where t1.id=t2.id )/*

id12*/

select * from t1 where not exists (

select * from t2 where t1.id=t2.id )/*

id3null

*/select * from t1 where t1.id not in (

select t2.id from t2 where t2.id is not null

)/*******************************************

* 結論:

* not in 在子查詢中有null記錄時,獲取不到任何記錄

* 此時可以用 exists 代替, 或子查詢中強制只取 not null記錄

*******************************************/

SQL Server中的查詢

本博文簡單介紹一下sql server中常用的幾類查詢及相關使用的方法。一 executescalar方法獲取單一值 executescalar方法是sqlcommand類的方法之一,執行查詢,並返回查詢所返回的結果集中的第一行第一列。csharp view plain copy print cla...

SQL Server中row number的用法

row number 函式將針對select語句返回的每一行,從1開始編號,賦予其連續的編號。在查詢時應用了乙個排序標準後,只有通過編號才能夠保證其順序是一致的,當使用row number函式時,也需要專門一列用於預先排序以便於進行編號。row number 常用的幾種情況 1.使用row numb...

SQL Server 中的死鎖

在兩個或多個任務中,如果每個任務鎖定了其他的任務試圖鎖定的資源,會造成這些任務永久阻塞,從而出現死鎖。此時系統處於死鎖狀態。死鎖的原因 在多使用者環境下,死鎖的發生是由於兩個事物都鎖定了不同的資源而又都在申請對方鎖定的資源,即一組程序中的各個程序均占有不會釋放的資源,但因相互申請其他程序占用的不會釋...