2013-02-12 16 views
5

Zobacz te dwie tabele próbki:Jak uzyskać niedopasowane rekordy z dwóch tabel

Tabela 1:

id acc_no name 
------------------------ 
1  14  aaaa 
2  16  bbbb 
3  18  ccccc 
4  25  wwww 
5  27  xxxxxxx 
6  28  zzzzzzz 

Tabela 2:

sr no acc_no amount 
---------------------- 
1  14  2000 
2  16  2344 
3  18  3200 

muszę się zapisy na podstawie z acc_no, które nie pasują do tabeli 1, na przykład:

WYJŚCIE:

id acc_no name 
--------------------- 
4 25  wwww 
5 27  xxxxxxx 
6 28  zzzzzzz 

Kiedy próbowałem z poniższym zapytaniu, wynik nie był niezawodny:

SELECT t1.* 
FROM table1 t1 
    LEFT OUTER JOIN table2 t2 ON t1.acc_no = t2.acc_no 
WHERE t2.acc_no IS NULL 

Podaj swoje sugestie. Jakie będzie właściwe zapytanie SQL, aby uzyskać wynik powyżej?

+0

dlaczego wynik nie był niezawodny? – fthiella

+0

Twoje zapytanie jest prawidłowe. jaki jest problem? –

+0

zdefiniować niezawodne. –

Odpowiedz

8

try:

SELECT * 
FROM table1 t1 
WHERE t1.acc_no NOT IN (SELECT acc_no FROM table2) 
+0

czyste i proste .. dzięki '+ 1' –

6

Powinno być:

select t1.id,t1.acc_no,t1.name from table1 t1 
    left outer join table2 t2 on t1.acc_no = t2.acc_no 
     where 
    t2.id is null 
+0

@Devand Rathod: działa to tylko wtedy, gdy pole Id w obu tabelach jest powiązane - na przykład Tabela 1 Id jest obcym kluczem w tabeli 2. Sądząc po przykładowym kodzie plakatu, nie jest jasne (choć możliwe), że tak właśnie jest. – Anthill

+0

masz rację, ale co z acc_no? jeśli używasz acc_no? –

+0

możesz użyć acc_no, jak wiem. –

1

Spróbuj też:

select t1.* from table1 t1 where 
    not exists (
    select 1 from table2 t2 
    where t1.acc_no=t2.acc_no 
    ) 
Powiązane problemy