我这里有两张桌子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中搜索过一些东西。但我无法完成这项任务,由于时间的限制,我在这里发布了一个问题,以便得到你的帮助。
任何帮助对我来说都会更有用。谢谢
答案 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);