Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana saya bisa meningkatkan kueri ini untuk menghindari penggunaan tampilan bersarang?

Biasakan dengan data yang Anda miliki:

Hal kunci pertama adalah memahami data apa yang Anda miliki. Di sini, dalam hal ini, Anda memiliki empat tabel

  • Perusahaan Asuransi
  • Pasien
  • Dokter
  • Kunjungan

Tujuan Anda:

Temukan daftar semua pasien yang mengunjungi semua ahli ortopedi (spesialis) yang terkait dengan Perusahaan Asuransi mereka.

Mari kita mundur selangkah dan menganalisisnya menjadi bagian-bagian yang lebih kecil:

Umumnya, persyaratannya mungkin sedikit berlebihan ketika Anda melihatnya secara keseluruhan. Mari bagi persyaratan menjadi komponen yang lebih kecil untuk memahami apa yang perlu Anda lakukan.

  1. Bagian a: Anda perlu menemukan daftar dokter, yang spesialisasinya adalah 'Dokter Ortopedi'
  2. Bagian b: Temukan daftar pasien yang mengunjungi dokter yang disebutkan di #1.
  3. Bagian c: Filter hasil #2 untuk menemukan daftar pasien dan dokter yang berbagi perusahaan asuransi yang sama.
  4. Bagian d: Cari tahu bahwa pasien yang mengunjungi masing-masing Ahli Ortopedi yang memiliki perusahaan asuransi yang sama dengan pasien.

Cara mendekati:

  1. Anda perlu mengidentifikasi tujuan utama Anda, di sini dalam hal ini untuk mengidentifikasi daftar pasien. Jadi, kueri tabel Pasien terlebih dahulu.

  2. Anda memiliki pasien, sebenarnya semuanya tetapi kita perlu menemukan pasien mana yang mengunjungi dokter. Jangan khawatir apakah dokter itu seorang Ahli Ortopedi atau bukan. Kami hanya perlu daftar pasien dan dokter yang mereka kunjungi. Tidak ada pemetaan antara tabel Pasien dan Dokter. Untuk mengetahui informasi ini,

    Gabung dengan tabel Pasien dengan tabel Kunjungan di bidang kunci yang benar.

    Kemudian gabungkan output dengan tabel Dokter di bidang kunci yang benar.

  3. Jika Anda telah melakukan join dengan benar, Anda sekarang harus memiliki daftar semua pasien dan dokter yang telah mereka kunjungi. Jika Anda menggunakan LEFT OUTER JOIN , Anda akan menemukan bahkan pasien yang belum pernah mengunjungi dokter. Jika Anda menggunakan RIGHT OUTER JOIN , Anda hanya akan menemukan pasien yang mengunjungi dokter.

  4. Sekarang, Anda memiliki semua pasien dan dokter yang telah mereka kunjungi. Namun, persyaratannya adalah untuk menemukan hanya dokter yang Ahli Ortopedi . Jadi, terapkan kondisi untuk memfilter hasil agar hanya memberikan hasil yang diinginkan.

  5. Anda sekarang telah mencapai persyaratan yang dibagi menjadi komponen yang lebih kecil di bagian a dan bagian b . Anda masih perlu menyaringnya oleh perusahaan asuransi. Inilah bagian yang sulit, persyaratan tidak mengatakan bahwa Anda perlu menampilkan perusahaan asuransi, jadi kita tidak perlu menggunakan tabel Perusahaan Asuransi. Pertanyaan Anda berikutnya akan 'How am I going to filter the results?' . Poin yang valid. Cari tahu apakah salah satu dari tiga tabel Patient , Doctor dan Visits berisi informasi perusahaan asuransi. Patient dan Doctor memiliki bidang yang sama. Bergabunglah dengan bidang umum itu untuk memfilter hasilnya.

  6. Temukan jumlah Ahli Ortopedi yang unik yang telah dikunjungi setiap pasien.

  7. Berikut adalah bagian yang dapat dilakukan dengan banyak cara, salah satu cara melakukannya adalah dengan menambahkan sub kueri yang akan menjadi kolom keempat Anda di output. Sub kueri ini akan menanyakan tabel Dokter dan memfilter menurut spesialisasi ='Ahli ortopedi'. Selain filter tersebut, Anda juga harus memfilter dengan cara mencocokkan perusahaan asuransi di tabel dalam dengan id perusahaan asuransi di tabel Pasien yang ada di query utama. Subquery ini akan mengembalikan hitungan semua Orthopedist untuk id perusahaan asuransi yang sesuai dengan data pasien.

  8. Anda sekarang harus memiliki bidang patient id , patient name , patients visits count dan total number of Orthopedists in same insurance company dari sub kueri. Anda kemudian dapat menambahkan gabungan luar yang akan memfilter hasil dari tabel turunan ini pada bidang di mana patients visits count cocok dengan total number of Orthopedists in same insurance company . Saya tidak mengatakan ini adalah pendekatan terbaik. Ini adalah salah satu pendekatan yang dapat saya pikirkan.

  9. Jika Anda mengikuti logika di atas, Anda seharusnya memiliki ini.

Daftar pasien yang telah mengunjungi semua dokter

Difilter hanya oleh dokter, yang merupakan Ahli Ortopedi

Difilter oleh pasien dan dokter yang berbagi informasi perusahaan asuransi yang sama.

Sekali lagi, seluruh output kemudian disaring oleh dua bidang hitungan yang ditemukan di dalam output tabel turunan.

Bola ada di lapangan Anda:

  • Cobalah selangkah demi selangkah dan setelah Anda menemukan jawabannya. Posting di sini sebagai jawaban terpisah. Saya akan memberikan suara positif untuk mengimbangi semua suara negatif yang Anda dapatkan pada pertanyaan ini.

Saya yakin Anda dapat melakukannya dengan mudah.

Jika Anda tersandung...

Jangan ragu untuk mengirimkan pertanyaan Anda sebagai comments to this answer , Yang lain dan saya akan dengan senang hati membantu Anda.

Penafian

Saya telah memberikan salah satu dari banyak cara bagaimana logika ini dapat diimplementasikan. Saya yakin ada banyak cara untuk menerapkan ini dengan cara yang jauh lebih baik.

Hasil:

Silakan merujuk jawaban @Ofek Ron untuk kueri yang benar yang menghasilkan keluaran yang diinginkan. Saya tidak menulis bagian apa pun dari kueri. Itu semua usaha OP.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. String kueri MySQL berisi:

  2. Bisakah saya menggunakan fungsi untuk nilai default di MySql?

  3. Bagaimana cara mengambil data dari database untuk ditampilkan dalam format csv di halaman web?

  4. Bagaimana cara membuat koneksi database saya aman?

  5. JSON_REMOVE() – Hapus Data dari Dokumen JSON di MySQL