2014-11-08 47 views
1

我有這樣的MySQL TABL的colmns有大約9000行:選擇行,其中其他列不匹配

number | description | Bronze | Gold | Silver | Platinum 

如何選擇行,其中,列黃金白金不相等

我曾嘗試銅牌的價值:

SELECT * FROM `callplandata` WHERE `Silver` != `Bronze` AND `Gold` != `Bronze` 

,但它不返回行,即使它應該返回:

number description   Bronze Silver Gold 
441  UK Local/National 1.2  0.893 0.7 
+0

創建一個SQLFiddle請說明問題。 – CBroe 2014-11-08 13:29:55

+0

按照Begueradj的建議,你也可以看到這個鏈接的最後一個例子,以獲得它的想法http://dev.mysql.com/doc/refman/5.1/en/row-subqueries.html – 2014-11-08 13:46:01

回答

0

您的查詢看起來不錯,但我發現身邊奇數場的報價。

的原則是正確的 - 在SELECT語句中,你可以只用比較一個領域到另一個值!==

也許有一些四捨五入發生,或其他問題的精度是否意味着價值你看起來一樣,但不完全相同?你沒有提到字段類型 - 是否有可能它們是相似的,但不是等價的浮點數,或者在選擇它們時舍入到更低的精度?

還要小心NULL值,因爲它們不像您所期望的那樣使用數字比較。

我剛剛在本地運行這個測試代碼,它的一切都如你所期望的那樣工作。注意我使用了固定的數字精度。

mysql> create table testit (number int, description text, Bronze numeric(10,5), Silver numeric(10,5), Gold numeric(10,5), Platinum numeric(10,5)); 
Query OK, 0 rows affected (0.07 sec) 

mysql> insert into testit values (441,'UK Local/National',1.2 ,0.893,0.7, null) ; 
Query OK, 1 row affected (0.16 sec) 

mysql> select * from testit; 
+--------+---------------------+---------+---------+---------+----------+ 
| number | description   | Bronze | Silver | Gold | Platinum | 
+--------+---------------------+---------+---------+---------+----------+ 
| 441 | UK Local/National | 1.20000 | 0.89300 | 0.70000 |  NULL | 
+--------+---------------------+---------+---------+---------+----------+ 
1 row in set (0.00 sec) 

mysql> SELECT * FROM testit WHERE Gold != Bronze AND Silver != Bronze; 
+--------+---------------------+---------+---------+---------+----------+ 
| number | description   | Bronze | Silver | Gold | Platinum | 
+--------+---------------------+---------+---------+---------+----------+ 
| 441 | UK Local/National | 1.20000 | 0.89300 | 0.70000 |  NULL | 
+--------+---------------------+---------+---------+---------+----------+ 
1 row in set (0.00 sec)