2013-04-10 10 views
44

Mam tabelę definicyjną, o której wiem, że nie jest utrzymywana bardzo dobrze, nazwijmy to table A. Mam inną tabelę (nazywam ją table B), która jest znacznie mniejsza i najlepiej powinna być subset of table A, ale wiem, że table A jest nieco nieaktualna i nie zawiera nowych wpisów, które są w Table B.sql: sprawdź, czy wpis w tabeli A istnieje w tabeli B

Należy zauważyć, że tabele A i B mają różne kolumny.

Table A: 
ID, Name, blah, blah, blah, blah 

Table B: 
ID, Name 

Chcę wszystkie wiersze w tabeli B takie, że identyfikator w tabeli B nie istnieje w tabeli A. Nie jest to więc nie pasuje do wiersza w tabeli A, chcę tylko wiersze w tabeli B, jeżeli ID nie istnieje w ogóle w tabeli A.

Odpowiedz

90
SELECT * 
FROM B 
WHERE NOT EXISTS (SELECT 1 
        FROM A 
        WHERE A.ID = B.ID) 
+0

niesamowite. To było to! Doceniam to bardzo. – codingknob

+0

@ algotr8der, miło mi było pomóc. Dobry dzień. – gdoron

+2

'wybierz * z TableB b, gdzie b.ID nie jest (wybierz a.ID z TableA a)' – vakio

12

Jeśli są ustawione na wykorzystaniu EXISTS można użyć poniżej w SQL Server:

SELECT * FROM TableB as b 
WHERE NOT EXISTS 
(
    SELECT * FROM TableA as a 
    WHERE b.id = a.id 
) 
12

odpowiedź klasyczny, który działa w niemal każdym środowisku to

SELECT ID, Name, blah, blah 
FROM TableB TB 
LEFT JOIN TableA TA 
ON TB.ID=TA.ID 
WHERE TA.ID IS NULL 

czasami NOT EXISTS może nie być zaimplementowany (nie działa).

+0

Dzięki, to bardzo pomogło! – lenach87

0

Albo jeśli "NIE istnieje" nie są realizowane

SELECT * 
FROM B 
WHERE (SELECT count(*) FROM A WHERE A.ID = B.ID) < 1 
Powiązane problemy