2012-01-24 41 views
28

Tôi có câu hỏi rất đơn giản như thế này:truy vấn "không bằng" không hoạt động

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

deleted_1 của tôi được mặc định là null hoặc một số người dùng id, nhưng đối với một số lý do truy vấn này luôn trả về cho tôi 0 hàng , tôi cũng đã cố gắng <> nhưng vẫn không có may mắn những gì có thể là sai?

EDTI Vì vậy, sau khi chạy hơn querys tôi tìm ra rằng vấn đề của tôi là giá trị mặc định của deleted_1 lĩnh vực, đó là NULL vì vậy tôi sửa đổi truy vấn của tôi và bây giờ nó hoạt động tốt:

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

Tại sao 1 được kèm theo trong dấu ngoặc kép như một chuỗi? –

+5

'WHERE \' deleted_1 \ '! = 'NULL'' Bạn không nên làm điều này. NULL là đặc biệt, có một cái nhìn vào câu trả lời của tôi. – TimWolla

+0

@TimWolla cảm ơn bạn, tôi sẽ làm theo cách của bạn. – Linas

Trả lời

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

giá trị NULL cần điều trị đặc biệt: http://dev.mysql.com/doc/refman/5.1/en/working-with-null.html

tôi muốn đề nghị sử dụng toán tử hình thoi (<>) ủng hộ != như là người đầu tiên là SQL hợp lệ và điều thứ hai là một bổ sung MySQL.

+2

Tôi khuyên bạn nên sử dụng! = Vì dễ đọc hơn và bạn đang sử dụng mysql chứ không phải sql :). – Andrew

-2

Làm thế nào về loại bỏ các dấu nháy đơn xung quanh 1?

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

Đây cũng là suy nghĩ đầu tiên của tôi, nhưng http://dev.mysql.com/doc/refman/5.5/en/type-conversion.html dường như ngụ ý rằng điều này sẽ xảy ra tự động ... – ziesemer

+0

vẫn không có gì, lúc đầu tiên tôi nghĩ rằng nó có thể là vấn đề mà hầu hết các lĩnh vực của tôi là null, nhưng ngay cả khi một số có một số nó vẫn không chọn bất cứ điều gì. – Linas

+0

Hmm sau khi chạy thêm vài truy vấn, nó trả về cho tôi những hàng mà 'delete_1' không phải là' NULL', nó thực sự lạ vì tôi chắc chắn trước khi nó không trả lại bất cứ thứ gì ngay cả khi có một số con số. theo mặc định là 'NULL' có lẽ tôi nên đặt nó là 0 thì – Linas

4

Bạn có thể thử cách này: 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 | 
+----------------------------+----------------------------+----------------------------------+ 

Hoặc này 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 | 
+-----------------------+-----------------------+-----------------------------+ 

Nó thực sự phụ thuộc vào những gì bạn muốn lấy lại.

2

Hãy thử này .. Hy vọng nó sẽ làm việc cho bạn

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

Tôi khuyên bạn nên sử dụng toán tử NULL-an toàn và phủ định

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

Chỉ là những gì tôi đang tìm kiếm! – Gediminas

Các vấn đề liên quan