Mam następujący stół: Tabela 1
temp_id node_name variable_1 variable_2 variable_3
1 ab a b y
2 sdd a a a
3 u a s s
oraz następną tabelę: Tabela 2
temp_id node_name variable_1 variable_2 variable_3
1 ab as sb y
2 sdd a a a
3 u a s s
Chcę pobrać wszystkie rekordy z tabeli 1, gdzie zmienna_1, zmienna_2 i zmienna_3 tabeli 1 nie są zgodne z tabelą 2.
Jak mogę to zrobić w TSQL?
Odpowiedzi:
1 dla odpowiedzi № 1SELECT * FROM [table 1] t1
WHERE NOT EXISTS (
SELECT * FROM [table 2] t2
WHERE
t1.variable_1 = t2.variable_1
AND t1.variable_2 = t2.variable_2
AND t1.variable_3 = t2.variable_3
)
---EDYTOWAĆ---
Powyższe „pobierze wszystkie rekordy z tabeli 1, gdzie zmienna_1, zmienna_2 i zmienna_3 tabeli 1 nie są zgodne z tabelą 2”, tak jak prosiłeś.
Wydaje się jednak, że chcesz dopasować określone wiersze z tabeli 2, a nie tylko dowolne wiersze (BTW, powinieneś był to określić w swoim pytaniu). W takim przypadku odpowiedź Marco wygląda dobrze.
3 dla odpowiedzi № 2
Spróbuj tego:
INSERT INTO new_table
SELECT t1.* FROM table1 AS t1
LEFT JOIN table2 AS t2
ON t1.temp_id = t2.temp_id AND
t1.node_name = t2.node_name
WHERE t1.variable_1 <> t2.variable_1 AND
t1.variable_2 <> t2.variable_2 AND
t1.variable_3 <> t2.variable_3