У меня есть 2 таблицы:
- Таблица_1 с столбцами col_A, col_B, col_ C, col_D, col_E
- Таблица_2 с столбцами col_A, col_B, col_ C, col_D, col_F
Я хотел бы присоединиться к ним по столбцам col_A, col_B, col_ C, col_D.
Для строк в Таблице_1, которые не объединяются таким образом (поскольку они не совпадают в Таблице_2), я хотел бы присоединить их только к столбцам col_A, col_B, col_ C.
Если в Таблице_1 все еще есть строки, которые не были соединены, я хотел бы объединить их только по столбцам col_A, col_B.
И как только это будет сделано, в Таблице_1 есть еще строки, которые не присоединился, я хотел бы присоединиться к ним только в столбце col_A.
Я написал следующий скрипт, где я использую новую таблицу, чтобы получить этот результат. Есть ли более эффективный способ сделать это? Желательно, создавая представление, а не таблицу?
create table new_table (col_A nvarchar(50) , col_B nvarchar(50) , col_C nvarchar(50)
, col_D nvarchar(50) , col_E nvarchar(50) , col_F nvarchar(50) )
go
insert into new_table
select Table_1.* , Table_2.col_F
from Table_1
inner join Table_2
on Table_1.col_A=Table_2.col_A
and Table_1.col_B=Table_2.col_B
and Table_1.col_C=Table_2.col_C
and Table_1.col_D=Table_2.col_D
go
insert into new_table
select Table_1.* , Table_2.col_F
from Table_1
inner join Table_2
on Table_1.col_A=Table_2.col_A
and Table_1.col_B=Table_2.col_B
and Table_1.col_C=Table_2.col_C
where concat (Table_1.col_A, Table_1.col_B , Table_1.col_C , Table_1.col_D , Table_1.col_E
not in (select concat (col_A, col_B , col_C , col_D , col_E) from new_table)
go
insert into new_table
select Table_1.* , Table_2.col_F
from Table_1
inner join Table_2
on Table_1.col_A=Table_2.col_A
and Table_1.col_B=Table_2.col_B
where concat (Table_1.col_A, Table_1.col_B , Table_1.col_C , Table_1.col_D , Table_1.col_E
not in (select concat (col_A, col_B , col_C , col_D , col_E) from new_table)
go
insert into new_table
select Table_1.* , Table_2.col_F
from Table_1
inner join Table_2
on Table_1.col_A=Table_2.col_A
where concat (Table_1.col_A, Table_1.col_B , Table_1.col_C , Table_1.col_D , Table_1.col_E
not in (select concat (col_A, col_B , col_C , col_D , col_E) from new_table)
go