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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Abfrage sollte das tun, was Sie suchen.
1.
2.
Müssen Sie klären, welche der beiden Instanzen von Schülern, die Sie hier meint, in jedem der beiden Fälle -- S1 oder S2? Wie erklären Sie Ihre (Hausaufgaben?) Zuordnung, es ist 100% zweideutig in jedem Fall. Könnte
where S1.Mark>=20 and S1.Mark=(select max(s3.mark) from students s3
etc etc, oder viele andere Variationen.wieder die Unklarheit darüber, welche Instanz der Studierenden, die Sie bedeuten, trotzdem brauchen Sie nur zu ändern wählen Sie und fügen Sie eine Verknüpfung:
wählen Sie Markierungen.Ranking von
Schüler S1
join Studenten S2 auf S1.Id=S2.StudentId)
join Markierungen auf(S1.Name=Mark.Name)
und die
where
- Klausel nach wie vor.