【问题标题】:Find inconsistencies in two columns from two different tables从两个不同的表中查找两列中的不一致
【发布时间】:2016-01-22 06:02:46
【问题描述】:

我正在寻求帮助以查找来自两个不同表的两列之间的不一致。

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

【问题讨论】:

  • 您需要通用解决方案还是只是添加了多个 RDBMS 标签?
  • 您能否分享一些到目前为止您尝试过的代码,即使它不起作用?如果您可以分享更具体的内容,其他人可能会更容易提出解决方案。
  • @KevinHooke 添加了我用的,不知道开头是否正确
  • @RyanVincent 这是一个我正在帮助某人的项目,我想他直到明天才有,这不一定是一个巨大的问题。我只是需要一些关于如何做到这一点的指导,因为我从来没有遇到过这样的野兽。
  • @RyanVincent 你能举个例子吗?

标签: mysql sql sql-server oracle


【解决方案1】:

这是一种方法,您可以组合两个表中的所有值并仅选择计数为 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

【讨论】:

  • 我不明白,对不起。
【解决方案2】:

您发布的查询几乎正是您想要的。但是, where 谓词是您出错的地方。当你有一个外连接时,你必须检查 NULL 而不是不等式。与 NULL 相比的任何值都是 NULL,因此在检查相等或不相等时不会返回。您发布的 where 谓词基本上是 where TX-RT322 NULL。

对 where 谓词稍作更改,这应该会产生您想要的结果。

where t1.ColumnA is null
    or t2.ColumnB is null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多