我有兩個表,表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
即使有記錄匹配,我也會得到一個空集。我該如何解決這個問題?
實施例:
L1 = 118.4363對錶A,但對於表B L1 = 118.445428
我有兩個表,表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
即使有記錄匹配,我也會得到一個空集。我該如何解決這個問題?
實施例:
L1 = 118.4363對錶A,但對於表B L1 = 118.445428
不是檢查平等的,檢查該差值低於某個閾值(例如,0.1%,如實施例中下面)。
SELECT * FROM
TableA l1, TableB l2
WHERE
ABS(l1.L1-l2.L1) < 0.1
AND
ABS(l1.L2-l2.L2) < 0.1
如果容差變化,會發生什麼 –
@cool_cs - 那麼容差應該是*變量*。 –
@cheeken謝謝你的回答。我遇到了一個類似的問題,我試圖實現這個解決方案,但我不太明白(也是從問題中)語句中的語法=>什麼是'l1','l2'和'L1'和' L2'是指? –
您需要設計一些容差,比如說相差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;
你不能要求發動機回到這「一些小的量」不同的人。
您可以選擇差異「abs(a - b)」在兩個固定值之間的行。
喜歡行,其中A-B> 5或一個 - B> X和一個 - B < X + 10。例如
嘗試在Sybase或SQL Server中使用循環函數,使118與118匹配。對於其他DBMS找到一個等價的圓。
邁克
爲@ cheeken的回答工作,你必須把分號在最後的查詢,否則將無法正常工作:
SELECT * FROM
TableA l1, TableB l2
WHERE
ABS(l1.L1-l2.L1) < 0.1
AND
ABS(l1.L2-l2.L2) < 0.1;
什麼是「一些小數量」 –
贊對於表A而言,L1 = 118.4363,但對於表B,L1 = 118.445428 –
@cool_cs我遇到了類似的問題,我試圖實現這個解決方案,但是我不太瞭解語句中的語法=>什麼是'l1' ,'l2'和'L1'和'L2'指的是? –