1. 程式人生 > >SQL中exsit和in

SQL中exsit和in

本週在做ETL的時候踩了個小坑

A表中資料有18條,有欄位UserID

B表與A表結構相同,但只有16條資料(手動刪除2條,更改2條UserID為不重複的其他值)

Select UserID from B where UserID in (Select UserID from A)

時,查到12條資料(預想為14條)

Select UserID from B where UserID not in (Select UserID from A)

時,查到2條資料(預想為2條)

Select UserID from B where UserID exsit (Select UserID from A)

時,查到14條資料

 

經查詢,發現表中有2條資料UserID欄位為null。

翻閱資料發現,無論in和not in,null都不成立,而exsit會成立

in的處理方式是:首先查詢子查詢內容,然後與主查詢做笛卡爾積;

exsit的處理方式是:首先查詢主查詢,然後遍歷每一條結果是否符合子查詢要求,符合則返回true並儲存結果,否則返回false不儲存結果