Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich diese Abfrage verbessern, um die Verwendung von verschachtelten Ansichten zu vermeiden?

Machen Sie sich mit den Daten vertraut, die Sie haben:

Das erste, was wichtig ist, ist zu verstehen, welche Daten Sie haben. Hier in diesem Fall haben Sie vier Tabellen

  • Versicherungsunternehmen
  • Patient
  • Ärzte
  • Besuche

Ihr Ziel:

Finden Sie die Liste aller Patienten, die alle Orthopäden (Fachrichtung) besucht haben, die mit ihren Versicherungsgesellschaften verbunden sind.

Lassen Sie uns einen Schritt zurücktreten und es in kleineren Stücken analysieren:

Generell könnten die Anforderungen etwas überwältigend sein, wenn man sie im Großen und Ganzen betrachtet. Lassen Sie uns die Anforderungen in kleinere Komponenten aufteilen, um zu verstehen, was Sie tun müssen.

  1. Teil a: Sie müssen die Liste der Ärzte finden, deren Fachgebiet „Orthopäde“ ist
  2. Teil b: Finden Sie die Liste der Patienten, die die in Nr. 1 identifizierten Ärzte aufgesucht haben.
  3. Teil c: Filtern Sie das Ergebnis Nr. 2, um die Liste der Patienten und Ärzte zu finden, die dieselbe Versicherungsgesellschaft haben.
  4. Teil d: Finden Sie heraus, dass die Patienten jeden dieser Orthopäden aufgesucht haben die derselben Krankenkasse angehören wie der Patient.

Vorgehensweise:

  1. Sie müssen Ihr Hauptziel identifizieren, hier in diesem Fall die Liste der Patienten identifizieren. Fragen Sie also zuerst die Patiententabelle ab.

  2. Sie haben die Patienten, eigentlich alle, aber wir müssen herausfinden, welche dieser Patienten die Ärzte aufgesucht haben. Machen wir uns keine Gedanken darüber, ob der Arzt ein Orthopäde ist oder nicht. Wir brauchen nur die Liste der Patienten und der von ihnen besuchten Ärzte. Es gibt keine Zuordnung zwischen Patienten- und Ärztetabelle. Um diese Informationen herauszufinden,

    Verknüpfen Sie die Patiententabelle mit der Besuchstabelle im richtigen Schlüsselfeld.

    Verknüpfen Sie dann die Ausgabe mit der Ärztetabelle im richtigen Schlüsselfeld.

  3. Wenn Sie die Verknüpfung korrekt durchgeführt haben, sollten Sie jetzt die Liste aller Patienten und der von ihnen besuchten Ärzte haben. Wenn Sie LEFT OUTER JOIN verwendet haben finden Sie sogar Patienten, die noch nie einen Arzt aufgesucht haben. Wenn Sie RIGHT OUTER JOIN verwendet haben , finden Sie nur die Patienten, die einen Arzt aufgesucht haben.

  4. Jetzt haben Sie alle Patienten und die Ärzte, die sie besucht haben. Voraussetzung ist jedoch, dass nur Ärzte gefunden werden, die Orthopäden sind . Wenden Sie also die Bedingung an, um das Ergebnis zu filtern, um nur das gewünschte Ergebnis zu erhalten.

  5. Sie haben nun die in Teil a in kleinere Komponenten aufgeteilten Anforderungen erfüllt und Teil b . Sie müssen es noch nach den Versicherungsgesellschaften filtern. Hier ist der knifflige Teil, die Anforderung besagt nicht, dass Sie die Versicherungsgesellschaft anzeigen müssen, also müssen wir die Tabelle InsuranceCompanies nicht verwenden. Ihre nächste Frage lautet 'How am I going to filter the results?' . Gutes Argument. Finden Sie heraus, ob eine der drei Tabellen Patient ist , Doctor und Visits enthalten die Informationen der Versicherungsgesellschaft. Patient und Doctors ein gemeinsames Feld haben. Verbinden Sie dieses gemeinsame Feld, um das Ergebnis zu filtern.

  6. Ermitteln Sie die Anzahl der einzelnen Orthopäden die jeder Patient besucht hat.

  7. Hier ist der Teil, der auf viele Arten ausgeführt werden kann. Eine Möglichkeit, dies zu tun, wäre das Hinzufügen einer Unterabfrage, die Ihre vierte Spalte in der Ausgabe wäre. Diese Unterabfrage würde die Tabelle „Ärzte“ abfragen und nach Fachgebiet filtern =„Orthopäde“. Zusätzlich zu diesem Filter müssen Sie auch filtern, indem Sie die Versicherungsgesellschaft in der inneren Tabelle mit der Versicherungsgesellschafts-ID in der Patiententabelle abgleichen, die sich in der Hauptabfrage befindet. Diese Unterabfrage gibt die Anzahl aller Orthopäden für die ID der Versicherungsgesellschaft zurück, die mit den Patientendaten übereinstimmt.

  8. Sie sollten jetzt die Felder patient id haben , patient name , patients visits count und die total number of Orthopedists in same insurance company aus der Unterabfrage. Sie können dann einen äußeren Join hinzufügen, der die Ergebnisse aus dieser abgeleiteten Tabelle nach den Feldern filtert, in denen patients visits count entspricht der total number of Orthopedists in same insurance company . Ich sage nicht, dass dies der beste Ansatz ist. Dies ist ein Ansatz, der mir einfällt.

  9. Wenn Sie der obigen Logik folgen, sollten Sie dies haben.

Liste der Patienten, die alle Ärzte aufgesucht haben

Gefiltert nach nur Ärzten, die Orthopäden sind

Gefiltert nach Patienten und Ärzten, die dieselben Versicherungsunternehmensinformationen teilen.

Auch hier wird die gesamte Ausgabe nach den beiden Zählfeldern gefiltert, die sich in der abgeleiteten Tabellenausgabe befinden.

Der Ball liegt bei Ihnen:

  • Probieren Sie es Schritt für Schritt aus und sobald Sie die Antwort gefunden haben. Poste es hier als separate Antwort. Ich werde sie positiv bewerten, um all die negativen Stimmen zu kompensieren, die Sie zu dieser Frage erhalten haben.

Ich bin zuversichtlich, dass Sie dies problemlos tun können.

Wenn Sie stolpern...

Zögern Sie nicht, Ihre Fragen als comments to this answer zu posten , Andere und ich helfen Ihnen gerne weiter.

Haftungsausschluss

Ich habe eine der vielen Möglichkeiten bereitgestellt, wie diese Logik implementiert werden kann. Ich bin mir sicher, dass es viele Möglichkeiten gibt, dies viel besser umzusetzen.

Ergebnis:

Bitte beachten Sie die Antwort von @Ofek Ron für die richtige Abfrage, die die gewünschte Ausgabe erzeugt. Ich habe keinen Teil der Abfrage geschrieben. Es war alles die Anstrengung von OP.