2012-01-24 42 views
28

我有這樣非常簡單的查詢:查詢「不等於」不工作

SELECT * FROM `all_conversations` WHERE `deleted_1` != '1'; 

而且我deleted_1是默認爲null或一些用戶ID,但由於某些原因,此查詢總是返回我0行,我也嘗試<>,但仍然沒有運氣可能是錯誤的?

EDTI所以運行更querys我發現,我的問題是deleted_1場的默認值後,它是NULL,所以我修改我的查詢,現在它工作正常:

SELECT * 
FROM `all_conversations` 
WHERE `deleted_1` != 'NULL' 
AND `deleted_1` != 23 
+1

爲什麼1被封閉在像繩子報價工作? –

+5

'WHERE \'deleted_1 \'!='NULL''你不應該這樣做。 NULL是特別的,看看我的答案。 – TimWolla

+0

@TimWolla謝謝你,我會按你的方式去做。 – Linas

回答

65
SELECT * FROM all_conversations WHERE deleted_1 <> 1 OR deleted_1 IS NULL 

NULL值需要特殊處理:http://dev.mysql.com/doc/refman/5.1/en/working-with-null.html

我建議使用有利於!=菱形操作符(<>)作爲第一個是有效的SQL,第二個是一個MySQL的補充。

+2

我建議使用!=因爲更具可讀性,而且你使用的是mysql,而不是sql :)。 – Andrew

-2

如何去除單引號1左右?

SELECT * FROM `all_conversations` WHERE `deleted_1` != 1; 
+0

這是我的第一個想法,但http://dev.mysql.com/doc/refman/5.5/en/type-conversion.html似乎暗示這應該自動發生... – ziesemer

+0

仍然沒有,起初我認爲這可能是問題,我的大部分領域都是空的,但即使有些人有一個數字,它仍然不會選擇任何東西。 – Linas

+0

嗯運行幾個更多的查詢它finaly返回我的行'deleted_1'不是'NULL'它真的很奇怪,因爲我確信它沒有返回任何東西,即使有一些數字,所以我想我的問題是該領域默認情況下是'NULL',也許我應該將它設置爲0,然後 – Linas

4

你可以試試這個:deleted_1 is not null and deleted_1 != '1'

mysql> select 0 is not null and 0 != '1', 1 is not null and 1 != '1', null is not null and null != '1'; 
+----------------------------+----------------------------+----------------------------------+ 
| 0 is not null and 0 != '1' | 1 is not null and 1 != '1' | null is not null and null != '1' | 
+----------------------------+----------------------------+----------------------------------+ 
|       1 |       0 |        0 | 
+----------------------------+----------------------------+----------------------------------+ 

還是這個deleted_1 is null or deleted_1 != '1'

mysql> select 0 is null or 0 != '1', 1 is null or 1 != '1', null is null or null != '1'; 
+-----------------------+-----------------------+-----------------------------+ 
| 0 is null or 0 != '1' | 1 is null or 1 != '1' | null is null or null != '1' | 
+-----------------------+-----------------------+-----------------------------+ 
|      1 |      0 |       1 | 
+-----------------------+-----------------------+-----------------------------+ 

這真的取決於你想要什麼回來。

2

試試這個..希望它會爲你

SELECT * 
FROM `all_conversations` 
WHERE `deleted_1` IS NOT NULL 
AND `deleted_1` <> 23 
3

我建議使用NULL安全操作員和否定

SELECT * FROM `all_conversations` WHERE NOT(`deleted_1` <=> '1'); 
+0

正是我期待的! – Gediminas