【问题标题】:Compare tables in MSSQL and get different values比较 MSSQL 中的表并获取不同的值
【发布时间】:2017-12-11 10:52:38
【问题描述】:

我这里有两个表 tmp_1 和 tmp_2, 表1

------+---------
|name |lastname|
------+---------
|John |rosy   |
------+---------
|Demy |Sanches |
------+---------

表2

------+----------
|name2|lastname2|
------+----------
|John |rose     |
------+----------
|Demy |Sanches  |
------+----------

我正在使用内连接来比较这两个表,例如,

select * from tmp_1 t1
inner join tmp_2 t2
on t1.name = t2.name
and t1.lastname = t2.lastname

输出:

name    lastname    name    lastname
Demy    Sanches     Demy    Sanches

预期输出:

name    lastname    name    lastname
John    rosy        John    rose

这会导致这些值相等。但我想获得与两个表不同的值。我在 StackOverflow 中搜索了一些东西。但是我无法完成这项工作,由于时间限制,我在这里发布了问题以寻求您的帮助。

任何帮助都会对我更有用。谢谢

【问题讨论】:

  • 有何不同?名字相等但不等于姓氏等?
  • 您使用的是 MySQL 还是 MS SQL Server?不要标记未涉及的产品。

标签: mysql sql sql-server join inner-join


【解决方案1】:

要查找表仅在一列中不同的行,您可以编写以下代码

select * from tmp_1 t1
inner join tmp_2 t2 on (t1.name = t2.name2 and t1.lastname != t2.lastname2) or 
                       (t1.name != t2.name2 and t1.lastname = t2.lastname2) 

【讨论】:

    【解决方案2】:

    使用以下可能会起作用。这仅适用于 lastname 不匹配。

    select t1.name,t1.lastname,t2.name,t2.lastname from tmp_1 t1
    inner join tmp_2 t2
    on t1.name = t2.name
    and t1.lastname != t2.lastname
    

    如果两个字段都有条件选择,那么

    select t1.name,t1.lastname,t2.name,t2.lastname from tmp_1 t1
    inner join tmp_2 t2
    on ((t1.lastname != t2.lastname and t1.name = t2.name) or 
    (t1.lastname  = t2.lastname and t1.name != t2.name))
    

    【讨论】:

      【解决方案3】:

      如果您只是想要两个表中没有完全匹配的所有记录,那么以下方法将起作用。主要问题是你的问题不够具体。但是,从逻辑上讲,以下答案是正确的,因为它为您提供了原始查询的补充(参见 De Morgan)。

      SELECT * FROM tmp_1 t1
          INNER JOIN tmp_2 t2 
              ON (t1.name != t2.name2 OR t1.lastname != t2.lastname2); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多