从两个不同的表

时间:2015-10-22 20:12:48

标签: mysql sql sql-server oracle

我正在寻找帮助,找出两个不同表中两列之间的不一致。

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

2 个答案:

答案 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