比较两个大致相等的数字

时间:2012-06-06 16:58:55

标签: mysql sql

我有两个表,表A和表B.我为每个表都有两个属性L1和L2。我正在尝试输出两个表的所有行,其中L1和L2对于两个表都相等。问题是L1和L2可能会有所不同。所以,当我跑:

SELECT * FROM TableA l1 join TableB l2 on l1.L1 =l2.L1 and l1.L2 = l2.L2 

即使有匹配的记录,我也会得到一个空集。我该如何解决这个问题?

示例:

表A的L1 = 118.4363,但表B L1 = 118.445428

5 个答案:

答案 0 :(得分:13)

不要检查是否相等,而是检查差异是否低于某个阈值(例如,0.1,如下例所示)。

SELECT * FROM 
    TableA l1, TableB l2 
WHERE 
    ABS(l1.L1-l2.L1) < 0.1 
    AND
    ABS(l1.L2-l2.L2) < 0.1

答案 1 :(得分:5)

你需要设计一些容差,比如说差值为0.01。然后在减去时计算两者的绝对值,看它是否在你的公差范围内

SET @tolerance_value = 0.01;
SELECT * 
FROM 
  TableA l1 join 
  TableB l2 
     on ABS(l1.L1 - l2.L1) < @tolerance_value and ABS(l1.L2 - l2.L2) < @tolerance_value;

答案 2 :(得分:1)

你不能要求引擎返回“少量”不同的引擎。

您可以选择差值“abs(a - b)”在两个固定值之间的行。

a-b&gt;的行类似5 a - b&gt; x a - b&lt; X + 10 即可。例如

答案 3 :(得分:0)

尝试在Sybase或SQL Server中使用round函数,因此118匹配118.对于其他DBMS,找到一个等效的圆形。

麦克

答案 4 :(得分:0)

为了@ cheeken的工作答案,你必须在最后一个查询中加一个分号,否则它不会起作用:

SELECT * FROM 
    TableA l1, TableB l2 
WHERE 
    ABS(l1.L1-l2.L1) < 0.1 
    AND
    ABS(l1.L2-l2.L2) < 0.1;