У меня есть две таблицы 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. Но я не мог этого сделать. Из-за ограничений по времени я поставил вопрос здесь, чтобы получить от вас помощь.
Любая помощь была бы более полезной для меня. Спасибо
Чтобы найти строки, в которых таблицы отличаются только одним столбцом, вы можете написать следующее
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)
Если вы просто хотите, чтобы все записи, которые не имеют точного соответствия в двух таблицах, будут работать. Основная проблема заключается в том, что ваш вопрос недостаточно конкретный. Однако, логически, следующий ответ правильный, поскольку он предоставляет вам дополнение к исходному запросу (см. De Morgan
).
SELECT * FROM tmp_1 t1
INNER JOIN tmp_2 t2
ON (t1.name != t2.name2 OR t1.lastname != t2.lastname2);
Используйте следующее может это 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))