1. 程式人生 > >mysql not in null 子查詢問題

mysql not in null 子查詢問題

今天寫了一個sql:

SELECT * from tableA a where a.mobile not in (select b.mobile from tableB b);

在本地的一個測試資料庫執行能查出資料,然後放外網查詢就沒有資料。

經過確定,外網是應該查出資料的,不知道為什麼,然後專案經理給了我另一條sql

select a.mobile,b.mobile from tableA a left join tableB b on a.id=b.id
對比了一下,分析了一下,測試資料庫能查出資料,是因為mobile沒有為null的資料。

帶著疑問網上搜了下,發現not in (子查詢) 的問題,如果 子查詢有一個為null,都會導致結果為0,所以才會查不出資料。

最後解決為

SELECT * from tableA a where a.mobile not in (select b.mobile from tableB b where b.mobile is not null);

這樣就子查詢就不會查出為null的資料,也就沒有問題了。


網上說in會替換為 or aa=aa or bb=bb .. 而not in會替換為 and a<>a and b<>b 這個我還沒怎麼理解

才發現,自己對sql查詢語句還是很薄弱,需要提高了。