ich arbeite nicht in mySQL, aber ich schreibe häufig äußerst komplexe SQL und hier ist, wie ich es angehen.
Zunächst gibt es keinerlei Ersatz für das Verständnis Ihrer Datenbankstruktur.
Als nächstes versuche ich, die Aufgabe in Stücke aufzuteilen.
Angenommen, ich schreibe einen Bericht über die Einzelheiten einer Besprechung (die Firma, für die ich arbeite, plant die Besprechung). Ich werde den Namen des Meetings und den Vertriebsmitarbeiter, den Veranstaltungsort und die Termine, die Personen, die teilgenommen haben, und die Informationen zum Referenten kennen.
Zuerst ermittele ich, welche der Tabellen die Informationen für jedes Feld im Bericht enthält. Jetzt weiß ich, was ich zusammen machen muss, aber noch nicht genau wie es jetzt ist.
Also zuerst schreibe ich eine Abfrage, um die Meetings zu bekommen, die ich will. Dies ist die Grundlage für den Rest des Berichts, also fange ich dort an. Nun kann der Rest des Berichts wahrscheinlich in beliebiger Reihenfolge ausgeführt werden, obwohl ich lieber die Teile durcharbeite, die zuerst eine Beziehung haben sollten, also werde ich als nächstes die Verknüpfungen und die Felder hinzufügen, die mir alle zugehörigen Vertriebsmitarbeiter bringen Information.
Angenommen, ich möchte nur einen Rep pro Meeting (wenn mehrere Reps vorhanden sind, möchte ich nur das Haupt), also überprüfe ich, ob ich immer noch die gleiche Anzahl von Datensätzen zurücksende wie zu der Zeit . Wenn nicht, schaue ich auf meine Verbindungen und entscheide, welche mir mehr Datensätze gibt, als ich brauche. In diesem Fall könnte es sich um die Adresstabelle handeln, da wir mehrere Adressen für die Repräsentation speichern. Ich passe dann die Abfrage an, um nur einen zu erhalten.Dies kann einfach sein (Sie können ein Feld haben, das die spezifische eindeutige Adresse angibt, die Sie möchten, und daher nur eine WHERE-Bedingung hinzufügen müssen), oder Sie müssen möglicherweise einige Gruppierungs- und Aggregatfunktionen ausführen, um zu erhalten, was Sie wollen.
Dann gehe ich weiter zum nächsten Chunk (arbeite zuerst durch alle Chunks, die ein 1-1 relationshis zu den zentralen Daten in diesem Fall das Meeting haben sollten). Führen Sie eine Abfrage durch und überprüfen Sie die Daten nach jedem Hinzufügen.
Schließlich gehe ich zu den Datensätzen, die eine Eins-Viele-Beziehung haben können, und füge sie hinzu. Wieder führe ich die Abfrage aus und überprüfe die Daten. Zum Beispiel könnte ich die Rohdaten für ein bestimmtes Meeting überprüfen und sicherstellen, dass meine Anfrage genau das liefert, was ich erwarte.
Angenommen, in einer dieser Ergänzungen eines Join finde ich die Anzahl der verschiedenen Sitzungen gesunken ist. Hoppla, dann gibt es keine Daten in einer der Tabellen, die ich gerade hinzugefügt habe, und ich muss das in eine linke Verknüpfung ändern.
Ein anderes Mal kann ich finden zu viele Datensätze zurückgegeben. Dann schaue ich, ob meine where-Klausel mehr Filterinformationen benötigt oder ob ich eine aggregate-Funktion verwenden muss, um die Daten zu erhalten, die ich brauche. Manchmal füge ich dem Bericht vorübergehend andere Felder hinzu, um zu sehen, ob ich sehen kann, was die doppelten Daten verursacht. Dies hilft mir zu wissen, was angepasst werden muss.
Der eigentliche Schlüssel ist, langsam zu arbeiten, Ihr Datenmodell zu verstehen und die Daten zu überprüfen, nachdem jeder neue Chunk hinzugefügt wurde, um sicherzustellen, dass die Ergebnisse so zurückgegeben werden, wie Sie es für richtig halten.
Manchmal, wenn ich eine Menge Daten zurücksende, werde ich vorübergehend eine zusätzliche where-Klausel in die Abfrage einfügen, um sie auf einige wenige Elemente zu beschränken, die ich leicht überprüfen kann. Ich empfehle auch stark die Verwendung von order by, weil es Ihnen hilft, zu sehen, wenn Sie doppelte Datensätze erhalten.
Vielen Dank für Ihre Meinung. Das ist toll. :) – Das123