[MS SQL] Kopiowanie tabel (połączenie 3 tabel w jedną).

0

Mam 3 tabele:

Tabela1 (kolumny: Id, Id_user, Id_art, inne nieważne)
Tabela2 (kolumny: Id, Id_user, Id_art, inne nieważne)
Tabela3 (kolumny: Id, Id_user, Id_art, inne nieważne)

Z tych tabel mam zrobić jedną:

NowaTabela (kolumny: Id, Id_user, Id_art, Tabela1_active, Tabela2_active, Tabela3_active).

Dane mają zostać skopiowane w ten sposób, że dla danej pary (Id_user, Id_art) ma zostać utworzony nowy wpis w tabeli NowaTabela z ustawionymi wartościami bitowymi Tabela1_active i/lub Tabela2_active i/lub Tabela3_active.

Przy czym jeśli w tabelach istnieją te same pary, ma zostać utworzony jeden wpis w nowej tabeli, z ustawionymi właśnie odpowiednimi bitami, odpowiadającymi tym tabelom.

Np:

Zawartość tabeli Tabela1:
Id, Id_user, Id_art
1, 1, 1, ...
2, 1, 2, ...
3, 1, 3, ...

Zawartość tabeli Tabela2:
Id, Id_user, Id_art
1, 1, 1, ...
2, 2, 2, ...

Zawartość tabeli Tabela3:
Id, Id_user, Id_art
1, 1, 1, ...
2, 2, 2, ...
2, 3, 3, ...

Z tych tabel ma powstać NowaTabela:
Id, Id_user, Id_art, Tabela1_active, Tabela2_active, Tabela3_active

1, 1, 1, true, true, true
2, 1, 2, true, false, false
3, 1, 3, true, false, false
4, 2, 2, false, true, true
5, 3, 3, false, false, true

Ma ktoś jakiś pomysł jak to ugryźć?

Pozdrawiam

0

select T.Id_user, T.Id_art,
case when Tabela1.Id_user is not null then 1 else 0 end as Tabela1_active,
case when Tabela2.Id_user is not null then 1 else 0 end as Tabela2_active,
case when Tabela3.Id_user is not null then 1 else 0 end as Tabela3_active
from
(
select Id_user, Id_art from Tabela1
union
select Id_user, Id_art from Tabela2
union
select Id_user, Id_art from Tabela3
) as T
left join Tabela1 on T.Id_user = Tabela1.Id_user and T.Id_art = Tabela1.Id_art
left join Tabela2 on T.Id_user = Tabela2.Id_user and T.Id_art = Tabela2.Id_art
left join Tabela3 on T.Id_user = Tabela3.Id_user and T.Id_art = Tabela3.Id_art

1 użytkowników online, w tym zalogowanych: 0, gości: 1