如何在 SQL 中连接浮点列?

L. *_*anc 2 sql

在 ANSI SQL(或重要的实现)中连接浮点列是否合法?

我确信这通常不是一个好主意,但我正在开发一个 API,并寻求 SQL 的指导来确定是否应该阻止它,或者留给开发人员选择。

如果合法,您是否可以选择指定在比较中使用的精度?

Gor*_*off 5

SQL 允许连接任何列和任何条件。

但是,如果您可以防止在浮点列上使用相等条件,则不应允许在此类列上进行连接。简单的替换是允许连接小数/数字列。

问题是什么?WYSIWIG(所见即所得)就是问题所在。两个浮点值可能看起来相同,但又不同。这会导致joins 失败。

您基本上可以将条件指定为:

on abs(a - b) < 0.00001 -- your favorite threshold
Run Code Online (Sandbox Code Playgroud)

但这会阻止使用索引。某些数据库可能对浮点数进行“模糊”匹配。

在某些情况下,您可能需要使用浮点值进行不等式连接。这将是在做范围时:

limit       val
1.4142     'a'
2.7182     'b'
3.1415     'c'
Run Code Online (Sandbox Code Playgroud)

但这是一种罕见的情况 - 特别是当限制应该是浮点而不是计数或货币限制时。