mysql not in null 子查詢問題
阿新 • • 發佈:2019-01-04
今天寫了一個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查詢語句還是很薄弱,需要提高了。