Ich muss Self Join in dieser Tabelle verwenden.
%Vor%Ich brauche Self-Join, um zu bekommen, welche Länder dasselbe Jahr wie die Türkei haben. Nur das Land und das Jahr anzeigen.
Das ist, was ich versuche zu tun.
%Vor%^ googled self join und hat es geschafft.
Ich bekomme nur die Türkei. Was mache ich falsch?
Sie sind so nah!
Da Sie sagen, dass Sie das Land und das Jahr von A anzeigen und um A. Country
der Türkei begrenzen, ist die Türkei alles, was Sie sehen werden. Sie müssen entweder die Auswahl ändern, um B.country
und B.year
zu sein, oder die where-Klausel ändern, um B.country
zu sein.
Dies verwendet eine Kreuzverbindung, die umso langsamer wird, je mehr Datensätze in einer Tabelle vorhanden sind.
%Vor%könnte geschrieben werden als ... und hätte wahrscheinlich den gleichen Ausführungsplan.
%Vor%ODER Dies verwendet einen INNER JOIN, der die Arbeit beschränkt, die die Engine ausführen muss, und leidet nicht unter einer Leistungsverschlechterung, die ein Cross Join hätte.
%Vor%WARUM:
Überlegen Sie, was die SQL-Engine tun wird, wenn der Join auftritt A B
%Vor% Wenn Sie also sagen, dass A.Country
und A.Year
angezeigt werden, wo A.Country
Türkei ist, können Sie sehen, dass alles, was es zurückgibt, Türkei ist (aufgrund des eindeutigen nur 1 Datensatzes)
Aber wenn Sie B.Country
in der Türkei und A.Country
anzeigen, erhalten Sie Frankreich, Kanada und die Türkei!
Ändern Sie a.Country = 'Turkey'
in b.Country = 'Turkey'
Sie haben SELECT DISTINCT a.Country
, aber Ihre Bedingung ist a.Country = 'Turkey'
. Selbst wenn Sie mehrere Zeilen erhalten, werden sie nach DISTINCT