2016-06-15 5 views
0
in Tabelle B existieren

Ich habe tableAWählen Sie aus Tabelle A, die mit der Bedingung in Tabelle B nicht

id | name  
-------------- 
1 | John 
2 | Alice  
3 | Bob 

und Tabelle B

id | tableA_id | setting 
-------------------------- 
1 | 1   | 1 
2 | 2   | 0 

Ich möchte alle eindeutigen IDs in Tabelle auszuwählen A, die nicht mit einer Bedingung in Tabelle B Einstellung = 0.

Beispiel in Tabelle B existieren würde ich mag erhalten

id | name  
-------------- 
1 | John  
3 | Bob 

Ich kann Abfrage verwenden:

SELECT * FROM tableA WHERE id NOT IN (SELECT tableA_id from tableB WHERE setting = 0) 

Aber ich denke, dass es langsam ist, weil zwei Tabellen groß ist. Ich denke, diese Abfrage wirkt sich auf die Leistung aus.

Wie kann ich das tun?

Antwort

1

Try this;)

select t1.* 
from tableA t1 
left join tableB t2 
on t1.id = t2.tableA_id 
where t2.setting <> 0 or t2.id is null 

DEMO HERE

Oder diese:

select * 
from tableA 
where not exists (
    select 1 from tableB where tableA.id = tableB.tableA_id and tableB.setting = 0 
) 

DEMO HERE

+0

ja, alles andere als 'nicht – Drew

+0

in' es nicht funktioniert. Mit Fall 1: Ergebnis hat nur 1 Datensatz "1 | John" Im Fall 2: Ergebnis hat alles in Tabelle a – Khaihkd

+0

@ Khaihkd Fall 1 ist definitiv falsch und ich habe aktualisiert, überprüfen Sie bitte die Demo; Fall 2 scheint richtig zu sein, überprüfen Sie bitte auch die Demo bitte: D – Blank

Verwandte Themen