Сравнение таблицы с sql / t sql в SQL Server 2012 - PullRequest
0 голосов
/ 17 января 2020

У меня есть четыре таблицы в SQL Server 2012: table1, table2, table3, и (таблица результатов / выходных данных) table4

  1. table1 усекается и загружается с новым данные ежедневно.

  2. table1 столбцы col1, col2, col3 аналогичны table2 столбцам col7, col18, col9 и table3 столбцам col9, col11, col7, поэтому мы можем загрузить соответствующие строки для table2 и table3

Проблема

Циклическая таблица table1 для проверки соответствия каждой строки (col1, col2, col3) любой строке в таблице2 (col7, col18) , col9) затем добавьте строку в table4, содержащую информацию table1.col1, table1.col2, table1.col3, table2.col6, table3.col1, table3.col7 и столбец, чтобы указать его обновление

  • если строка (col1, col2, col3) в таблице1 не существует в таблице2, добавьте строку в таблицу4, содержащую информацию table1.col1, table1.col2, table1.col3, table2.col6, table3.col1, table3.col7 и столбец, чтобы указать его добавление

  • , если строка (col7, col18, col9) в table2 не существует в table1 добавить строку в table4, содержащую информацию Таблица 1.col1, table1.col2, table1.col3, table2.col6, table3.col1, table3.col7 и столбец, чтобы указать его удаление

вернуть table4 как результат

Как мы можем сделать это только с SQL / T SQL?

1 Ответ

0 голосов
/ 17 января 2020

По сути, вы ищете full join с условными логами c в предложении from:

insert into table4
select
    t1.col1,
    t1.col2,
    t1.col3,
    t2.col6,
    t3.col1,
    t3.col7,
    case 
        when t2.col7 is null then 'insert'
        when t1.col1 is null then 'delete'
        else 'update'
    end action
from table1 t1
full join table2 t2 on t1.col1 = t2.col7 and t1.col2 = t2.col8  and t1.col3 = t2.col9
full join table3 t3 on t1.col1 = t3.col9 and t1.col2 = t2.col11 and t1.col3 = t3.col7

Не очень понятно, что вы хотите сделать с table3. Возможно, вы хотите left join вместо full join с условиями, которые проверяются в обеих предыдущих таблицах, например:

left join table t3
    on  t3.col9  = coalesce(t1.col1, t2.col7)
    and t3.col11 = coalesce(t1.col2, t2.col8)
    and t3.col7  = coalesce(t1.col3, t2.col9)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...