MySQL Join-Bedingung

Ich habe Probleme beim denken, ein Weg, um die folgenden join in MySQL. Ich bin mir nicht sicher die mit am besten geeignet wäre für diese Aufgabe, ich werde Bearbeiten Sie den Titel, wenn jemand es darauf hin. Hier ist der Kern von, was ich versuche zu tun.

Ich habe zwei Tabellen, rufen Sie einen Students, und die anderen Marks.

Sie sind wie folgt aufgesetzt,

Studenten

Nur das Feld Id ist einzigartig

 .----+-----------------+--------+--------. 
| Id | Name | Parent | Mark | 
+----+-----------------+--------+--------+ 
| 1 | der Name geht here1| 0 | 0 | 
| 2 | der Name geht here2| 0 | 20 | 
| 3 | Namen geht here3| 2 | 45 | 
| 4 | der Name geht here4| 2 | 50 | 
| 5 | der Name geht here3| 1 | 20 | 
| 6 | Namen geht here1| 0 | 65 | 
.----+-----------------+--------+--------. 

Markiert

Id und Name sind einzigartig

 .----+-----------------+--------. 
| Id | Name |Ranking | 
+----+-----------------+--------+ 
| 1 | der Name geht here1 | 20 | 
| 2 | der Name geht here2 | 60 | 
| 3 | Namen geht here3 | 90 | 
| 4 | der Name geht here4 | 200 | 
| 5 | der Name geht here5 | 45 | 
| 6 | Namen geht here6 | 76 | 
.----+-----------------+--------. 

Nun, was ich brauche, ist wie folgt.

1. Ich müssen sich die Studierenden auf sich selbst, so dass Students.Parent=Students.Id

2. In den oben genannten beitreten, ich will nur die Zeile markieren, wo Students.Mark (S2) ist die höchste unter diesem Elternteil. Auch, nur beitreten, wenn Students.Mark >= 20 (Auch S2).

3. Ich möchte beitreten die vorherigen Student.Name auf Marks.Name (Von S1), die Auswahl der Rangliste.

Ergebnis

 .----+-----------------+--------+--------+--------+----------. 
| Id | Name | Parent | Child | Mark | Ranking | 
+----+-----------------+--------+--------+--------+----------+ 
| 1 | der Name geht here1| 0 | 5 | 20 | 20 | 
| 2 | der Name geht here2| 0 | 4 | 50 | 60 | 
.----+-----------------+--------+--------+--------+----------. 

Denke ich(?) dies ist möglich mit einer Abfrage, bin mir aber nicht sicher.

  • Ich hatte einen Blick auf diese, aber es ist zu verwirrend - warum haben Sie die Namen in der Tabelle markiert werden? Warum ist die Marke in der Schüler-Tabelle? Es sieht wirklich schlecht normalisiert, aber dies kann nur das Ergebnis Ihrer Verschleierung den ursprünglichen Namen, die ich Schätze. Aber es ist zu Abstrakt, um Ihnen helfen, sorry.
  • Ja, die Normalisierung scheint ein wenig aus, aber um fair zu sein, die eigentliche Tabelle ist viel komplexer. Es ist eine komplizierte Frage in irgendeiner form, und ich kann nicht reduzieren, viel mehr, ohne zu entfernen alle Gültigkeit aus der Antwort.
InformationsquelleAutor Ian Elliott | 2009-07-23
Schreibe einen Kommentar