在 ANSI SQL(或重要的实现)中连接浮点列是否合法?
我确信这通常不是一个好主意,但我正在开发一个 API,并寻求 SQL 的指导来确定是否应该阻止它,或者留给开发人员选择。
如果合法,您是否可以选择指定在比较中使用的精度?
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)
但这是一种罕见的情况 - 特别是当限制应该是浮点而不是计数或货币限制时。