Rumah pangkalan data tutorial mysql Mengapa MySQL Views (Pra-5.1) Tidak Boleh Menggunakan Subqueries dalam Klausa FROM?

Mengapa MySQL Views (Pra-5.1) Tidak Boleh Menggunakan Subqueries dalam Klausa FROM?

Jan 08, 2025 am 09:11 AM

MySQL视图的FROM子句中不允许使用子查询 (5.1版本之前)

Pra-MySQL 5.1 had paparan: subqueries dalam klausa FROM

Dalam versi sebelum MySQL 5.1, jika klausa FROM paparan mengandungi subkueri, ralat akan dilaporkan. Had ini mengurangkan fleksibiliti dalam membina pertanyaan pangkalan data.

Punca Punca

Secara sejarah, enjin MySQL kekurangan pelaksanaan untuk mengendalikan subkueri dalam klausa pandangan FROM. Ini disebabkan terutamanya oleh kerumitan enjin dan masalah prestasi.

Penyelesaian

Untuk memintas pengehadan ini, anda boleh menggunakan kaedah berikut:

  • Gunakan jadual terbitan: Tidak perlu mencipta paparan, terus gunakan pernyataan SELECT yang sama seperti subkueri seperti jadual terbitan. Jadual terbitan boleh dialiaskan dan digabungkan seperti pandangan.
  • Buat paparan perantaraan: Uraikan pertanyaan kompleks yang mengandungi subkueri kepada berbilang paparan perantaraan. Setiap subkueri boleh diberikan kepada paparan, dan kemudian pandangan boleh disertai kemudian. Pendekatan ini meningkatkan prestasi dan kebolehselenggaraan.
  • Menggunakan subkueri sertai: Dalam sesetengah kes, anda boleh menggunakan subkueri gabungan untuk mencapai hasil yang serupa dengan subkueri dalam klausa FROM. Ini memerlukan membina semula pertanyaan menggunakan operasi gabungan bersarang.

Contoh penyelesaian

Pertimbangkan contoh pertanyaan berikut:

SELECT temp.UserName 
FROM (SELECT u1.name as UserName, COUNT(m1.UserFromId) as SentCount 
      FROM Message m1, User u1 
      WHERE u1.uid = m1.UserFromId 
      Group BY u1.name HAVING SentCount > 3 ) as temp
Salin selepas log masuk

Penyelesaian yang mungkin menggunakan jadual terbitan:

SELECT dt.UserName 
FROM (SELECT u1.name as UserName, COUNT(m1.UserFromId) as SentCount 
      FROM Message m1, User u1 
      WHERE u1.uid = m1.UserFromId 
      GROUP BY u1.name HAVING SentCount > 3 ) dt
Salin selepas log masuk

Had Pertanyaan

Walaupun penyelesaian di atas merangkumi kebanyakan senario, terdapat beberapa kes khas di mana subkueri dalam klausa FROM mungkin penting. Tiada penyelesaian langsung untuk jenis pertanyaan ini dalam versi sebelum MySQL 5.1.

Atas ialah kandungan terperinci Mengapa MySQL Views (Pra-5.1) Tidak Boleh Menggunakan Subqueries dalam Klausa FROM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kurangkan penggunaan memori MySQL di Docker Kurangkan penggunaan memori MySQL di Docker Mar 04, 2025 pm 03:52 PM

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Mar 19, 2025 pm 03:51 PM

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Mar 04, 2025 pm 04:01 PM

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif Apa itu SQLite? Gambaran Keseluruhan Komprehensif Mar 04, 2025 pm 03:55 PM

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Mar 04, 2025 pm 03:54 PM

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

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Mar 04, 2025 pm 03:49 PM

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Mar 18, 2025 pm 12:00 PM

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

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Mar 18, 2025 pm 12:01 PM

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL?

See all articles