8

テーブル A とテーブル B の 2 つのテーブルがあります。テーブルごとに 2 つの属性 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

4

5 に答える 5

16

等しいかどうかをチェックする代わりに、差があるしきい値(たとえば、以下の例のように0.1)を下回っていることを確認します。

SELECT * FROM 
    TableA l1, TableB l2 
WHERE 
    ABS(l1.L1-l2.L1) < 0.1 
    AND
    ABS(l1.L2-l2.L2) < 0.1
于 2012-06-06T17:01:09.077 に答える
5

たとえば、0.01の差など、ある程度の許容誤差を考案する必要があります。次に、減算したときの2つの絶対値を計算し、それが許容範囲内にあるかどうかを確認します

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;
于 2012-06-06T17:01:21.920 に答える
1

「少量」の違いでエンジンに返却を求めることはできません。

差「abs(a - b)」が 2 つの固定値の間にある行を選択できます。

ab > 5またはa - b > x および a - b < x+10 の行と同様です。例えば

于 2012-06-06T17:04:04.560 に答える