Rumah >pangkalan data >tutorial mysql >Mengapa Saya Tidak Boleh Menggunakan Alias Lajur dalam Pernyataan SELECT yang Sama?
Penjelasan bahawa alias lajur dalam pertanyaan SQL tidak boleh digunakan semula dalam pernyataan SELECT yang sama
Dalam pertanyaan SQL yang diberikan, cuba gunakan alias lajur (avg_time dan cnt) dalam ungkapan (ROUND(avg_time * cnt, 2)) selepas pernyataan SELECT. Walau bagaimanapun, ini menimbulkan ralat kerana alias lajur tidak boleh diakses dalam ungkapan SELECT berikutnya.
Had ini timbul daripada susunan enjin SQL memproses pertanyaan. Pernyataan SELECT dilaksanakan terlebih dahulu, dan alias dibuat semasa fasa ini. Walau bagaimanapun, ungkapan seterusnya diproses kemudian, pada ketika itu alias belum ditakrifkan.
Penyelesaian: Gunakan subquery
Untuk mengatasi had ini, subkueri boleh digunakan. Subkueri ialah pertanyaan berasingan yang dibenamkan dalam pertanyaan lain. Dalam kes ini, anda boleh menggunakan subkueri untuk mencipta alias dan kemudian mengaksesnya dalam pertanyaan luar.
Pertanyaan berikut menggunakan subkueri untuk merangkum pertanyaan asal dan menjadikan alias lajur tersedia di lapisan luar:
<code class="language-sql">SELECT stddev_time, max_time, avg_time, min_time, cnt, ROUND(avg_time * cnt, 2) as slowdown FROM ( SELECT COALESCE(ROUND(stddev_samp(time), 2), 0) as stddev_time, MAX(time) as max_time, ROUND(AVG(time), 2) as avg_time, MIN(time) as min_time, COUNT(path) as cnt, path FROM loadtime GROUP BY path ORDER BY avg_time DESC LIMIT 10 ) X;</code>
Dalam pertanyaan ini, subkueri (dalam kurungan) mencipta alias lajur stddev_time, max_time, avg_time, min_time dan cnt. Pertanyaan luar kemudian memilih lajur daripada subkueri, termasuk alias avg_time, yang digunakan dalam ungkapan ROUND(avg_time * cnt, 2) tanpa menghadapi sebarang ralat.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Alias Lajur dalam Pernyataan SELECT yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!