首先我运行mysql Ver 14.12 Distrib 5.0.45,使用readline 5.0运行redhat-linux-gnu(x86_64)
很抱歉格式化但我没有能力复制它所以我必须输入它。
有问题的两个字段如下
id int(11)
startj1950 decimal(38,6)
mysql> select id,startj1950 from store where id = 32513;
+------------------+
| id | startj1950 |
+----------|----------------------|
|32513 | 1912181654.500000 |
-----------------------------------
mysql> select id from store where startj1950=1912181654.500000;
Empty set
所以我想我在副本中搞砸了,所以我会让mysql为我获取价值。
mysql> select id from store where startj1950=(select startj1950 from store where id=32513);
Empty set <br/>
但它适用于其他结果
mysql> select id,startj1950 from store where id = 32513;
+------------------+
| id | startj1950 |
+----------|----------------------|
|18675 | 1907365784.570000 |
-----------------------------------
mysql> select id from store where startj1950=1907365784.570000;
+----------+
| id |
+----------|
|18675 |
------------
mysql> select id from store where startj1950=(select startj1950 from store where id=18675);<br/>
+----------+
| id |
+----------|
|18675 |
------------
我想我要么遇到了mysql错误,要么我误解了某种概念。在此先感谢您的帮助。
答案 0 :(得分:0)
decimal(38,6)将是一个浮点类型,具有与该类型相关的所有困难。在这种特殊情况下,这意味着显示的某些值不是精确值。该列的大小让我怀疑底层类型已经是双精度,因此要查询此列,您需要执行类似的操作...
SELECT *
FROM store
WHERE startj1950 BETWEEN somevalue - @delta AND somevalue + @delta;
并在获得所需结果之前调整delta的值,或者重新设计列以便您可以使用INTEGER或CHAR类型。