2017-07-03 110 views
0

我運行PHP也phpMyAdmin的這個簡單的查詢:選擇查詢總是返回空結果

SELECT * FROM `rdm_order` WHERE `aff_result` != "xyc" 

我檢查。表,列和行都存在。

但查詢返回空結果。

aff_result是這樣的格式:VARCHAR(10) COLLATE utf8_persian_ci

似乎所有的事情是正確的。哪裏不對?

Sample data

Server: Localhost via UNIX socket 
Server type: MySQL 
Server version: 5.7.17-0ubuntu0.16.04.1-log - (Ubuntu) 
Protocol version: 10 
Server charset: UTF-8 Unicode (utf8) 

Apache/2.4.25 (Unix) OpenSSL/1.0.2g 
Database client version: libmysql - mysqlnd 5.0.12-dev 
PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation 
PHP version: 7.0.16 
+0

所有'aff_result'值都是'xyc'或'NULL'。 –

+0

在表中,爲NULL – Ali

+0

@HoneyBadger我做到了。相同的結果。 – Ali

回答

2

這是因爲值是NULL。不能通過=!=比較來捕獲NULL。改用以下內容:

SELECT * 
FROM  `rdm_order` 
WHERE `aff_result` != 'xyc' 
OR  `aff_result` IS NULL 
0

使用NULL -safe比較操作:

SELECT * 
FROM `rdm_order` 
WHERE not `aff_result` <=> 'xyc'; 

ANSI標準操作是is distinct from

+0

無效。該查詢適用於text和int類型。但不適用於varchar。 – Ali

+0

這對'varchar()'不起作用?這真的很奇怪。 –

-1

如果您沒有任何理由將默認值aff_result設置爲NULL,則可以修改aff_result列,並使用mysql alter命令將默認值設置爲''(空字符串),並且您的查詢將返回預期結果組。
正如@Siyual所解釋的那樣,NULL不能通過=或!=比較來捕獲。
在where子句中使用OR運算符不是索引友好的。

+0

如果你可以分享downvote的理由,我會非常感激。 – money