1

将双精度外键连接到整数主键的最高性能查询是什么。这些表来自数据供应商,我宁愿不转换列数据类型。

在此示例中,fk 是双精度,pk 是整数。

我应该使用圆形吗?

SELECT this_table.pk, other_table.some_col FROM this_table
INNER JOIN other_table ON other_table.pk = ROUND(this_table.fk) 

或者也许不需要转换?

谢谢。

4

1 回答 1

2

您可以直接连接整数和双精度数。MySQL 将自行管理类型转换。ROUND(double) 无论如何都返回一个双精度数,而不是一个整数。

连接只会对表示整数的双精度数成功。也就是说你可以直接加入6.0到6;你不能直接加入 6.000001 到 6。

如果要将6.000001 连接到 6,请将 double 转换为整数以连接 6.0 <= 6 < 7.0 范围内的值。. .

select ...
from table_with_integers n
inner join table_with_doubles d 
  on cast(d.double_column as unsigned integer) = n.integer_column
...

或使用 ROUND() 连接 6.0 <= 6 < 6.5 范围内的值。

如果双打应该表示整数,则类型转换更有意义。但是,如果双打应该代表整数,那么您首先不应该得到像 6.000001 这样的值。

于 2013-09-04T08:26:18.257 回答