我有这个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
答案 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)