Pemilihan subquery SQL dalam klausa WHERE IN: Ralat pemahaman "Apabila subquery tidak bermula dengan EXISTS, hanya satu ungkapan boleh ditentukan dalam senarai pilih"
Apabila cuba menambah subkueri pada klausa WHERE IN, sentiasa pastikan subkueri itu mengembalikan satu lajur untuk perbandingan. Ralat "Hanya satu ungkapan boleh ditentukan dalam senarai pilih apabila subkueri tidak bermula dengan EXISTS" bermakna subkueri anda mengembalikan berbilang lajur.
Untuk membetulkan ini, mari kita periksa pertanyaan yang diberikan:
<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>
Subkueri di dalam kurungan mengembalikan dua lajur: A_ID dan ud (kiraan nilai dNum yang berbeza untuk setiap A_ID). Walau bagaimanapun, klausa WHERE IN menjangkakan satu lajur untuk dibandingkan dengan A_ID. Oleh itu, kita perlu mengubah suai subkueri untuk hanya mengembalikan 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>
Subkueri kini mengembalikan satu lajur, A_ID, yang boleh digunakan untuk perbandingan dalam klausa WHERE IN. Selain itu, kami boleh mengalih keluar klausa COUNT(DISTINCT dNum) AS ud kerana ia tidak lagi memerlukan pemilihan 0.1% teratas nilai A_ID sahaja.
Pertanyaan yang diubah suai ini harus menyelesaikan ralat yang ditentukan dan membolehkan anda mendapatkan semula hasil yang diingini. Ingat, apabila menggunakan subquery dalam klausa WHERE IN, pastikan subquery hanya mengembalikan lajur yang diperlukan untuk perbandingan.
Atas ialah kandungan terperinci Mengapa Subquery SQL Saya dalam Klausa WHERE IN Mengembalikan 'Hanya Satu Ungkapan Boleh Ditentukan dalam Senarai Pilihan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!