資料庫 not in 的坑

2021-09-29 21:40:20 字數 1765 閱讀 5413

以oracle資料庫為列:

create

table test_20191124(name varchar2(5)

,num_cnt number)

;insert

into test_20191124 values

('a',1

);insert

into test_20191124 values

('b',2

);insert

into test_20191124 values

('c',3

);create

table test_20191124_1(name varchar2(5)

,num_cnt number)

;insert

into test_20191124_1 values

('a',1

);insert

into test_20191124_1 values

('b',2

);insert

into test_20191124_1 values

(null,3

);

進行not in查詢

select

*from test_20191124 where name notin(

select name from test_20191124_1)

;

是不是覺得應該返回

「『c』,3」

其實實際結果是:

這是為什麼呢,因為資料庫在反連線時候,使用not in 如果子查詢中返回有null值的時候,那麼整個結果都返回為空。現在對上邊sql進行改寫為

為了避免這種情況出現,可以使用not exists

select

*from test_20191124 a

where

notexists

(select

1from test_20191124_1 b where a.name=b.name)

;

結果為

現在在進行測試 in的用法

所以看出來,在子查詢 in 的時候不會受返回值為null的影響,但是not in 的時候一定要注意。如果不想記住這個可以直接用 not exists。

在td資料庫這個測試結果也同樣是這樣的。

資料庫 not in 的坑(後續)

我之前寫了一篇關於select 查詢時,當not in 裡子查詢中有null值時候,那麼不返回,這個是可以理解的。但是對於多字段我沒測試。有一天開發時,發現跑出的結果和我預想的有出入,我就進行了測試,測試截圖以oracle為例,實際我還在td上也跑了,下邊每一步我都附帶了td結果 create ta...

資料庫超時的坑

每次對資料庫連線時,我們有時候會碰到連線超時或者命令超時,這兩個超時是不一樣的。以ado.net為例,當客戶端和伺服器端連線時,碰到的超時情況主要有下面幾種 當從連線池獲取乙個連線時,碰到超時。當建立乙個全新連線 而不是從連線池獲取 時,碰到超時。當傳送乙個命令 command 到sql serve...

Python Scrapy 插入資料庫的坑

一 假如對應的資料庫是mysql。建立乙個字段 price 定義為float型別。要儲存到這個字段。錯誤做法 正常考慮都是 python建立乙個字元變數 然後 float一下。或是 直接是float變數。然後 insert into values f 正確做法 python建立的還是字元變數,然後 ...