2016-09-26 11 views
1

ich ein wenig MySQL-Test gemacht haben, und es war eine Frage:Mysql Anfragen. Wählen Sie aus zwei Tabellen

hier zwei Tabellen: t1 {t1_id, t1_name}, {t2 t2_id, t1_id, t2_name}. Geben Sie 3 Varianten wählen Anfrage aus beiden Tabellen, für t1.t1_id = t2.t1_id und 3 Varianten wählen Anfragen nach t1.t1_id! = T2.t1_id

Und ich wirklich dort stecken. Ich kenne nur eine Möglichkeit, über JOINS auszuwählen, von denen ich weiß, dass sie in den meisten Fällen die richtige ist. Aber es ist nur 1 Variante. Brauche deine Hilfe. Dank

Antwort

1

Anders als JOIN Sie auch kann ein Correlated Subquery und WHERE EXISTS mit eben diesen Zustand verwenden, wie in Bedingung

Mit EXISTS

select * from t1 
where exists(select 1 from t2 where t1.t1_id = t1_id); 

Correlated Subquery

select * from t1 
where t1_id in (select t1_id from t2); 
+0

Können Sie für diesen Fall mindestens ein Beispiel für "Correlated Subquery" angeben. Vielen Dank. –

+0

@VadZelenin, siehe Bearbeiten in Antwort, wenn das hilft. – Rahul

2

Eine andere Variante für die Join erster Fall wäre

zu tun
select * from t1, t2 
where t1.t1_id = t2.t1_id 

Ich denke, das ist eine implizite Join oder (beiläufig) ein Komma Join. Es ist implizit, weil Sie nie das Wort JOIN verwenden, aber Sie verlangen, dass diese beiden Felder gleich sind.

Eine weitere Variante für den zweiten Fall könnte

select * 
from t1 left join t2 on t1.t1_id = t2.t1_id 
where t2.t1_id is null 

da dies würden Sie Fälle, in denen die t2.t1_id nicht in der Tabelle t1 ist zu tun.

+0

Ich denke, JOIN (LINKS, RECHTS, INNER) ist sowieso eine Antwort, aber danke –

Verwandte Themen