Сравните таблицы в MSSQL и получите разные значения

0

У меня есть две таблицы tmp_1 и tmp_2 здесь, Table1

------+---------
|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. Но я не мог этого сделать. Из-за ограничений по времени я поставил вопрос здесь, чтобы получить от вас помощь.

Любая помощь была бы более полезной для меня. Спасибо

Теги:
sql-server
join
inner-join

3 ответа

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

Если вы просто хотите, чтобы все записи, которые не имеют точного соответствия в двух таблицах, будут работать. Основная проблема заключается в том, что ваш вопрос недостаточно конкретный. Однако, логически, следующий ответ правильный, поскольку он предоставляет вам дополнение к исходному запросу (см. De Morgan).

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

Используйте следующее может это works.This будет работать только для 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))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню