从表中选择其他列不匹配的行

时间:2014-11-08 13:24:22

标签: mysql

我有这个MySQL tabl的colmns,它有大约9000行:

number | description | Bronze | Gold | Silver | Platinum

如何选择列 Gold Silver Platinum 的行不等于 Bronze

我试过了:

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

但它甚至不返回任何行:

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

1 个答案:

答案 0 :(得分: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)