比较MSSQL中的表并获取不同的值

时间:2017-12-11 10:52:39

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

我这里有两张桌子tmp_1和tmp_2, 表1

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

表2

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

我使用Inner join来比较这两个表,比如

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中搜索过一些东西。但我无法完成这项任务,由于时间的限制,我在这里发布了一个问题,以便得到你的帮助。

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

3 个答案:

答案 0 :(得分:2)

要在一列中找到表不同的行,您可以编写以下内容

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) 

答案 1 :(得分:1)

使用以下内容可能会有效。这只适用于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))

答案 2 :(得分:1)

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

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