我正在寻找帮助,找出两个不同表中两列之间的不一致。
Table1有ColumnA
Table2有ColumnB
例如,ColumnA和ColumnB也在它们前面有前缀。
ColumnA = TZ-ZA112
ColumnA = TZ-RT322
ColumnB = AX-ZA112
ColumnB = AX-RT311
所以基本上我需要删除前缀,然后找到数据库中的不一致。所以不一致就是
ColumnA RT322
ColumnB RT311
因此列中的值可能存在于一个中,而另一个中不存在,因此我必须找出其存在的位置,然后将其删除。我需要帮助!
不确定这是否会有所帮助,但这是我使用的,它什么也没有返回。
SELECT *
FROM Table1 t1
FULL OUTER JOIN Table2 t2
ON t1.ColumnA = t2.ColumnB
WHERE t1.ColumnA != t2.ColumnB
答案 0 :(得分:0)
这是一种组合两个表中的所有值并仅选择计数为1的值的方法。substring
在SQL Server中有效,如果您使用的是其他数据库,则可能需要更改相应的功能。
select col from
(
select substring(columna,4,len(columna)) as col from tableA
union all
select substring(columnb,4,len(columnb)) from tableB
) t
group by col
having count(*) = 1
答案 1 :(得分:0)
您发布的查询几乎就是您想要的。但是,where谓词是你出错的地方。当你有一个外连接时,你必须检查NULL而不是不等式。与NULL比较时的任何值都为NULL,因此在检查相等性或不等式时不会返回。您发布的谓词位置基本上是TX-RT322<>的位置。 NULL。
稍微改变你的谓词,这应该产生你想要的结果。
where t1.ColumnA is null
or t2.ColumnB is null