我不明白爲什麼我在運行SQL查詢時得到某些結果。這是查詢:SQL WHERE子句沒有過濾出空列
SELECT A.flag, B.type, B.aID
FROM A
LEFT JOIN B ON B.aID = A.aID
WHERE A.startDate = '2013-01-07'
AND (A.flag = 1 OR B.type IS NOT NULL)
援助是在表A
主鍵下面是結果我得到:
flag type aID
---- ---- ----
0 NULL NULL
我本來期望那裏是沒有結果。我很困惑,因爲A.flag不是1,而B.type是null,這與我的WHERE子句相反。請注意,表B中此行沒有匹配項,因爲結果中B.aID爲空。當我只使用A.flag = 1
和B.type IS NOT NULL
之一而不是兩者運行查詢時,不會返回任何結果而不是一個結果。
奇怪的是,當我用ISNULL(B.type,'X')替換SELECT語句中的B.type時,沒有結果返回。當我將AND B.type IS NOT NULL
添加到LEFT JOIN時會發生同樣的情況。
爲什麼我會得到這個結果?
編輯:樣本數據
這裏是一個查詢,會從表中的行A,使用兩種不同的開始日期:
SELECT * FROM A
WHERE A.startDate IN ('2013-01-07', '2012-11-23')
我得到的結果如下(留出6列清晰度) :
aID cID sID psID startDate flag
------- ---- ---- ---- ----------------------- -----
23844 75 72 86 2013-01-07 00:00:00 0
23940 75 72 86 2012-11-23 00:00:00 1
21061 76 73 87 2012-11-23 00:00:00 0
21293 76 74 88 2012-11-23 00:00:00 0
21477 77 75 89 2012-11-23 00:00:00 0
21711 78 76 90 2012-11-23 00:00:00 0
21944 79 77 91 2012-11-23 00:00:00 0
22176 80 78 92 2012-11-23 00:00:00 0
22410 81 79 93 2012-11-23 00:00:00 0
22643 82 80 94 2012-11-23 00:00:00 0
23344 83 81 95 2012-11-23 00:00:00 0
22876 84 82 96 2012-11-23 00:00:00 0
23639 85 83 97 2012-11-23 00:00:00 0
23109 89 84 98 2012-11-23 00:00:00 0
(14 row(s) affected)
使用,我們發現2013年1月7日的幫助下,我們可以從這個下面的查詢看到,有沒有進入在表B中對應於該開始日期。
SELECT * FROM B
WHERE B.aID = 23844
這不會返回任何結果。
使用,我們發現2012年11月23日援助的,我們可以看到,所有但其中一個在表B中的對應條目
SELECT * FROM B
WHERE B.aID IN (23940,
21061,
21293,
21477,
21711,
21944,
22176,
22410,
22643,
23344,
22876,
23639,
23109)
結果:
bID aID type duration iMinutes
----- ------ ----- -------- ---------
5836 21061 M 0 0
5893 21293 M 0 0
5916 21477 M 0 0
5975 21711 M 0 0
6033 21944 M 0 0
6092 22176 M 0 0
6150 22410 M 0 0
6208 22643 M 0 0
6266 22876 M 0 0
6530 23109 M 0 0
6382 23344 M 0 0
6478 23639 M 0 0
(12 row(s) affected)
這真的是給你那些結果的查詢嗎?似乎不可能... –
「flag」和「type」列的數據類型是什麼?我的意思是,你確定'type'的值不是'NULL'而是'NULL'而不是NULL? – Lamak
@Lamak好點:) –