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?

Susan Sarandon
Susan Sarandonasal
2025-01-08 09:11:40613semak imbas

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:

<code class="language-sql">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</code>

Penyelesaian yang mungkin menggunakan jadual terbitan:

<code class="language-sql">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</code>

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