Rumah >pangkalan data >tutorial mysql >Mengapakah Subkueri SQL Saya Menghasilkan Ralat 'Hanya Satu Ungkapan Boleh Ditentukan dalam Senarai Pilihan'?

Mengapakah Subkueri SQL Saya Menghasilkan Ralat 'Hanya Satu Ungkapan Boleh Ditentukan dalam Senarai Pilihan'?

Linda Hamilton
Linda Hamiltonasal
2025-01-11 13:36:42316semak imbas

Why Does My SQL Subquery Produce

Menyelesaikan Masalah Ralat Subquery SQL: "Hanya Satu Ungkapan Boleh Ditentukan..."

Ralat ini, "Hanya satu ungkapan boleh ditentukan dalam senarai pilih apabila subkueri tidak diperkenalkan dengan EXISTS," timbul apabila pertanyaan SQL anda menggunakan subkueri dalam klausa IN dan subkueri cuba mengembalikan berbilang lajur . Operator IN hanya menerima satu lajur untuk perbandingan.

Mari kita periksa pertanyaan yang bermasalah:

<code class="language-sql">select count(distinct dNum)
from myDB.dbo.AQ
where A_ID in 
  (SELECT DISTINCT TOP (0.1) PERCENT A_ID, 
            COUNT(DISTINCT dNum) AS ud 
 FROM         myDB.dbo.AQ
 WHERE     M > 1 and B = 0 
 GROUP BY A_ID ORDER BY ud DESC)</code>

Pernyataan SELECT dalam dengan salah mengembalikan kedua-dua A_ID dan COUNT(DISTINCT dNum) AS ud. Ini melanggar peraturan untuk subkueri yang digunakan dengan IN.

Pertanyaan yang Dibetulkan:

Penyelesaian melibatkan penstrukturan semula subkueri untuk mengembalikan hanya lajur A_ID:

<code class="language-sql">select count(distinct dNum) 
from myDB.dbo.AQ 
where A_ID in
    (SELECT DISTINCT TOP (0.1) PERCENT A_ID
    FROM myDB.dbo.AQ 
    WHERE M > 1 and B = 0
    GROUP BY A_ID 
    ORDER BY COUNT(DISTINCT dNum) DESC)</code>

Pertanyaan yang disemak ini kini memilih dengan betul hanya A_ID dalam subkueri, menyelesaikan ralat. Pesanan oleh COUNT(DISTINCT dNum) dikendalikan dalam subkueri itu sendiri, memastikan 10% teratas daripada nilai A_ID (berdasarkan COUNT(DISTINCT dNum) dipilih.

Atas ialah kandungan terperinci Mengapakah Subkueri SQL Saya Menghasilkan Ralat 'Hanya Satu Ungkapan Boleh Ditentukan dalam Senarai Pilihan'?. 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