2016-11-07 82 views
0

我是DB2新手,無法找到與EXCEPT查詢相關的任何內容[除非是非常簡單的示例]。我試圖比較兩個表中的值,以便返回出現在TABLE_A而不是TABLE_B中的值。問題是被比較的列並不完全一樣,但首先需要一些操作。從TABLE_AEXCEPT DB2中的SELECT SQL查詢

ID_1場看起來是這樣的:從TABLE_B000 999

ID_2場看起來是這樣的:111-000999

所以從每個ID按摩的數據,我們得到的000999鍵值此示例行。這應該導致該行被排除在查詢結果之外,因爲數據出現在兩個表中。

SELECT REPLACE (ID_1, ' ','') AS ID_1_TRIM 
FROM MYDB.TABLE_A 
EXCEPT 
SELECT SUBSTRING(ID_2,5,10) 
FROM MYDB.TABLE_B 

這個語法是不行的,它似乎返回所有值TABLE_A,即使被按摩鍵值也出現在TABLE_B

回答

1

有你嘗試修剪可能

SELECT trim(REPLACE (ID_1, ' ','')) AS ID_1_TRIM 
FROM MYDB.TABLE_A 
EXCEPT 
SELECT trim(SUBSTRING(ID_2,5,10)) FROM MYDB.TABLE_B 

或投

SELECT cast(trim(REPLACE (ID_1, ' ','')) as varchar(15)) AS ID_1_TRIM 
FROM MYDB.TABLE_A 
EXCEPT 
SELECT cast(trim(SUBSTRING(ID_2,5,10)) as varchar(15)) FROM MYDB.TABLE_B 

在我的iSeries查詢工作,你蘇爾它的空間characteres在ID_1?

+0

謝謝,我試過這些替代方法,返回的結果仍然是'TABLE_A'中的所有值。當我分別運行每個'SELECT'查詢時,返回的值都是相同的格式並且應該匹配。 – joshi123

+0

真的很奇怪。如果你這樣做:SELECT * FROM MYDB.TABLE_A f1異常加入MYDB.TABLE_B f2 on cast(trim(REPLACE(f1.ID_1,'',''))as varchar(15))= cast(trim(SUBSTRING (f2.ID_2,5,10))as varchar(15)) – Esperento57

+0

看起來這是一個數據問題,但修剪技術是有用的,因爲有隱藏的空間,謝謝 – joshi123