


Bagaimana untuk Menyoal Berbilang Lajur dengan Cekap daripada Jadual Berbeza dalam SQL?
Jan 21, 2025 am 10:51 AMMengoptimumkan Pertanyaan SQL Berbilang Jadual, Berbilang Lajur
Mendapatkan semula data daripada berbilang jadual selalunya memberikan cabaran, terutamanya apabila perlu mengagregatkan nilai daripada pelbagai lajur. Kes sokongan baru-baru ini menyerlahkan kesukaran pengguna dalam mengira nilai dengan tepat merentas berbilang lajur dalam dua jadual. Percubaan awal mereka, menggunakan subkueri bersarang, menghasilkan keputusan yang salah.
Pertanyaan yang cacat kelihatan seperti ini:
SELECT * from ( SELECT COUNT(DAY_IN) AS arr FROM t_hospital WHERE DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )e, (SELECT COUNT(PAT_STATUS) AS ONG1 FROM t_hospital WHERE PAT_STATUS like '%ong%' and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN ) a, (SELECT COUNT(PAT_STATUS) AS RTED FROM t_hospital WHERE PAT_STATUS like '%rtde%'and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )b, (SELECT COUNT(PAT_STATUS) AS POLI FROM t_hospital WHERE PAT_STATUS like '%pol%'and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )c, (SELECT COUNT(PAT_STATUS) AS para FROM t_hospital WHERE PAT_STATUS like '%para%' and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )d
Penyelesaian terletak pada penggunaan pengagregatan bersyarat dalam satu pertanyaan. Pendekatan diperkemas ini mengira berbilang lajur berdasarkan syarat yang ditentukan, memberikan hasil yang tepat. Pertanyaan yang dipertingkatkan ialah:
SELECT DAY_IN, COUNT(*) AS arr, SUM(IF(PAT_STATUS like '%ong%', 1, 0)) AS ONG1, SUM(IF(PAT_STATUS like '%rtde%', 1, 0)) AS RTED, SUM(IF(PAT_STATUS like '%pol%', 1, 0)) AS POL1, SUM(IF(PAT_STATUS like '%para%', 1, 0)) AS para FROM t_hospital WHERE DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos GROUP BY DAY_IN
Pertanyaan yang disemak ini dengan cekap mendapatkan semula data yang diperlukan, menghapuskan ralat yang dikaitkan dengan struktur asal yang terlalu kompleks. Kuncinya ialah menyatukan pengiraan menjadi pertanyaan tunggal yang tersusun dengan baik menggunakan pernyataan SUM()
bersyarat.
Atas ialah kandungan terperinci Bagaimana untuk Menyoal Berbilang Lajur dengan Cekap daripada Jadual Berbeza dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)?

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL?
