Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyoal Berbilang Lajur dengan Cekap daripada Jadual Berbeza dalam SQL?

Bagaimana untuk Menyoal Berbilang Lajur dengan Cekap daripada Jadual Berbeza dalam SQL?

DDD
Lepaskan: 2025-01-21 10:51:10
asal
505 orang telah melayarinya

How to Efficiently Query Multiple Columns from Different Tables in SQL?

Mengoptimumkan 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:

<code class="language-sql">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</code>
Salin selepas log masuk

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:

<code class="language-sql">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</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan