2016-04-11 13 views
0

ich denke, es ist einfacher, auf ein Beispiel zu erklären. so hier sind meine TabellenSQL Where-Klausel abhängig von anderen Tabelle

Table A 
id | Name 
1 | row1 
2 | row2 
3 | row3 

Table B 
id | A_id | date 
1 | 1 | NULL 
2 | 1 | NULL 
3 | 2 | 2016-04-01 
4 | 2 | 2016-04-01 
5 | 3 | 2016-04-01 
6 | 3 | NULL 

Was im Versuch, für meinen select auf Tabelle A zu erreichen, ist nur Werte zurück, wenn die Zeilen auf Tabelle B zugeordnet Tabelle A ein Nulldatum haben, mindestens ein.

Select * from Table_A Where (?) 

Ist dies möglich? Ich würde nur row1 und row3 zurückbekommen, kann es gemacht werden?

+1

nicht genug Zeit war vergangen, als ich es versuchte. Danke wieder –

Antwort

2

Sie können EXISTS verwenden:

SELECT * 
FROM TableA a 
WHERE EXISTS(
    SELECT 1 
    FROM TableB b 
    WHERE 
     b.A_id = a.id 
     AND b.date IS NULL 
) 
+0

thx, Arbeit als ein Charme, drehte sich mein Kopf über dies, konnte es nicht gerade bekommen –

0
SELECT * 
FROM TableA a 
WHERE ID IN (SELECT ID_A 
    FROM TableB 
    WHERE date IS NULL 
) 

Subquery retrives IDs auf null Daten, was wiederum zu der Hauptabfrage übergeben haben, was Sie wollen

0

Sie können eine gefilterte OUTER verwenden JOIN:

select 
    A.id,A.Name 
from A 
left join B on A.id = B.A_id 
where B.date is null 
group by 
    A.id,A.Name 

JOINs sind, was DBMS-Optimierer am meisten tun sollen effizient, so dass die Verwendung eines JOIN, wo möglich, wahrscheinlich die beste Leistung liefert.

+0

@LuisSiquot: Danke; ist das besser? –

+0

ja, Kommentar gelöscht! –

+0

Dies ist ein besserer Ansatz als die gewählte Antwort. Sie sollten immer versuchen, verschachtelte Select-Anweisungen zu vermeiden, und in diesem Fall ist es unnötig. – Iman

Verwandte Themen