MySql. So verwenden Sie Self-Join

8

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?

    
hank99 22.05.2013, 21:32
quelle

3 Antworten

10

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!

    
xQbert 22.05.2013, 21:36
quelle
5

Ä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

gefiltert     
Explosion Pills 22.05.2013 21:34
quelle
0
%Vor%     
Ankit Singh 01.09.2015 14:26
quelle

Tags und Links