需要用整数主键加入双精度外键

时间:2013-09-04 04:20:01

标签: database postgresql primary-key foreign-key-relationship postgresql-9.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) 

或者可能不需要转换?

感谢。

1 个答案:

答案 0 :(得分:2)

您可以直接加入整数和双打。 MySQL将管理类型转换本身。无论如何,ROUND(double)返回一个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这样的值。