2016-11-07 116 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