将双精度外键连接到整数主键的最高性能查询是什么。这些表来自数据供应商,我宁愿不转换列数据类型。
在此示例中,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)
或者也许不需要转换?
谢谢。
将双精度外键连接到整数主键的最高性能查询是什么。这些表来自数据供应商,我宁愿不转换列数据类型。
在此示例中,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)
或者也许不需要转换?
谢谢。
您可以直接连接整数和双精度数。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 这样的值。