Имеет ли возраст, имя, профессия образуют первичный ключ (или, по крайней мере, уникальный ключ?):
Если да, то вы могли бы сделать что-то вроде:
SELECT
t1.name, t1.age, t1.profession,
t1.column1 as t1column1, t2.column1 as t2column1,
t1.column2 as t1column2, t2.column2 as t2column2,
FROM
table1 t1, table2 t2
WHERE
(t1.name = t2.name and t1.age = t2.age and t1.profession = t2.profession) and
(
t1.column1<>t2.column1
OR t1.column2<>t2.column2
OR t1.column3<>t2.column3)
Конечно, для этого требуется уникальный ключ, который является одним и тем же на обеих таблицах. Кроме того, я четко изменил результаты запроса, чтобы показать все столбцы, а не только те, которые изменились. Идентификация той, которая была изменена подобным образом в одном запросе T-SQL, является неудобной (но возможно), поэтому моя рекомендация заключалась бы в ее возврате так, и в зависимости от вашего варианта использования обработчик уровня приложения/представления обнаружил, какой столбец был изменен или просто сканирован это глазом.
Если вы действительно хотите сделать это в T-SQL, вы можете сделать это с СОЮЗОВ, как:
SELECT
t1.name, t1.age, t1.profession,
'column1' as ColumnChanged,
t1.column1 as oldValue,
t2.column1 as newValue
FROM
table1 t1, table2 t2
WHERE
(t1.name = t2.name and t1.age = t2.age and t1.profession = t2.profession) and
t1.column1<>t2.column1
UNION ALL #better peformance than UNION, which would enforce uniqueness
SELECT
t1.name, t1.age, t1.profession,
'column2' as ColumnChanged,
t1.column2 as oldValue,
t2.column2 as newValue
FROM
table1 t1, table2 t2
WHERE
(t1.name = t2.name and t1.age = t2.age and t1.profession = t2.profession) and
t1.column2<>t2.column2
.......
Как таблица1 обновляется? Просьба предоставить некоторые тестовые данные/сценарии, которые помогут нам понять. – ganders
Я не думаю, что это актуально. Если я ошибаюсь, объясните, почему. –
Да, я перечитываю ваш вопрос. См. Ответ ниже. – ganders