【问题标题】:How to compare two table matching and non matching in sql query?如何在sql查询中比较两个表匹配和不匹配?
【发布时间】:2021-03-19 23:50:52
【问题描述】:

我需要显示匹配和不匹配的记录。我有两张表(一张有服务器数据,一张有客户端输入数据)。我需要比较这两个值。 请帮助我如何做到这一点。

**服务器表数据**

DATA1 DATA2 DATA3
HELLO1 HI-1 CARE-1
HELLO2 HI-2 CARE-2

**客户端的输入表数据**

DATA1 DATA2 DATA3
HELLO1 HI-1 CARE
HELLO HI-2 CARE-2

需要输出:-

DATA1 : Matched
DATA2 : Matched
DATA3 : Not-Matched

【问题讨论】:

  • 也许是INTERSECTEXCEPT?老实说,目前还不清楚这里的逻辑是什么。
  • “匹配”和“不匹配”对您意味着什么?我明白为什么DATA2 匹配,因为两个数据集在该列中具有相同的行数和值。我明白为什么DATA3 不匹配。但是为什么你认为DATA1 确实匹配?该列第二行中的值在数据集之间有所不同。逻辑是什么? Edit 解释清楚。否则,读者在很大程度上是在猜测,浪费双方的时间。
  • 这只是一个例子..我有很长的实际数据,我不能在这里发布
  • “只是一个例子”很好,除非它没有清楚地表明你想要什么结果......它没有。

标签: sql sql-server


【解决方案1】:

嗯。 . .如果列具有相同的类型,则可能是反透视和完全连接以进行匹配。最后一步是聚合:

select col,
       (case when count(val) = count(*) then 'Matched'
             else 'Non-matched'
        end)
from (t1 cross join lateral
      (values (t1.data1, 'data1', 1), 
              (t1.data2, 'data2', 1),
              (t1.data3, 'data3', 1)
      ) v(col, val, which)
     ) full join
     (t2 cross join lateral
      (values (t2.data1, 'data1', 2), 
              (t2.data2, 'data2', 2),
              (t2.data3, 'data3', 2)
      ) v(col, val, which)
     )
     using (col, val)
group by col;

【讨论】:

  • 非常感谢您的帮助 :)
猜你喜欢
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多