2012-06-25 103 views
0

我發現了一個奇怪的方式,如何做一些MySQL。有人請解釋爲什麼會發生。

我從表A中選擇所有列,並從表B中以某種條件連接,這可能會或可能不會滿足每個表的行。


現在在連接之後,在WHERE語句中,我想完全省略具有表B的列categoryId值爲14的行(不是連接部分,而是整行)如果存在表B的結果(如果存在n我不希望這一行被保留)。

所以我在哪裏做WHERE tableB.categoryId != 14。沒有結果(當時應該是)。爲了好奇,我試圖將操作符重寫爲=,所以WHERE tableB.categoryId = 14,結果是我想要的結果我沒有得到,而且我不想讓我得到的結果。

我不明白這一點,這很奇怪。
不應該不等於事情有效嗎?
我也試過!(tableB.categoryId = 14),但也沒有結果。最後,我嘗試了WHERE IF(tableB.categoryId = 14, 0, 1),這確實有用。爲什麼這樣做,爲什麼不是不平等和否定經營者的工作?MySQL在刪除行後左加入

+1

[段落是你的朋友](http://en.wikipedia.org/wiki/Paragraph) –

+0

對不起,下次我會關注的。 –

回答

5

你需要WHERE tableB.categoryId IS NULL OR tableB.categoryId != 14

+0

將一個數字(any)與NULL比較總是很棘手,所以當你需要解決這種可能性時,你需要明確地指定NULL值 – poncha

0

我認爲你的問題無關,與左聯接。

對於調試,你應該嘗試一個更簡單的查詢而不用左連接。 只是SELECT * FROM tableB WHERE categoryId = 14

另外檢查類型的類別ID,問題可能是從int到字符串隱式轉換,不能在所有上下文中工作,所以他們更好地明確。