2016-11-07 7 views
0

私はDB2を初めて使用しており、非常に簡単な例を除いてEXCEPTクエリに関するものは見つかりませんでした。私はTABLE_Aに表示される値を返すために2つのテーブルの値を比較しようとしていますが、TABLE_Bにはありません。問題は、比較される列が正確にはキーではないが、最初にいくつかの操作が必要であるということです。 TABLE_AからDB2でのSELECT SQLクエリの除外

ID_1フィールドには、次のようになります。だから我々は、このサンプル行の000999のキー値を取得し、各IDからのデータをマッサージすることにより111-000999

TABLE_Bから000 999

ID_2フィールドのようになります。これにより、データが両方のテーブルに存在するため、この行がクエリ結果から除外されます。

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

この構文は動作しません、マッサージのキー値もTABLE_Bに表示されていても、TABLE_A内のすべての値を返すように表示されます。

答えて

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 

であるか、またはあなたのクエリの仕事は私のiSeriesで

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 

を唱えてもよいトリムしようとしていますが、それはID_1の宇宙characteresだSURですか?

+0

ありがとう、私はこれらの選択肢を試してきました。結果は戻っても 'TABLE_A'のすべての値です。それぞれの 'SELECT'クエリを別々に実行するとき、返される値は同じ形式であり、一致する必要があります。 – joshi123

+0

は本当に奇妙です。 SELECT * FROM MYDB.TABLE_A f1例外がMYDB.TABLE_B f2 にキャストされている場合(trim(REPLACE(f1.ID_1、 ''、 '')as varchar(15))= cast(trim(SUBSTRING (f2.ID_2,5,10)as varchar(15)) – Esperento57

+0

データに問題があるように見えますが、トリミングのテクニックは隠されたスペースがあって便利でした。ありがとう – joshi123