SQL subquery pilih sekatan senarai
Apabila anda menghadapi ralat "Apabila subquery tidak bermula dengan EXISTS, hanya satu ungkapan boleh ditentukan dalam senarai pilih", ini bermakna terdapat masalah dengan nilai pulangan subquery. Dalam subkueri yang bersarang dalam klausa WHERE IN, adalah penting untuk memastikan bahawa hanya satu lajur dikembalikan untuk dibandingkan dengan bahagian lain IN.
Pertanyaan yang diberikan pada mulanya mengandungi subkueri yang mengembalikan A_ID dan COUNT(DISTINCT dNum) sebagai ud. Walau bagaimanapun, dalam klausa WHERE IN, subkueri hanya boleh mengembalikan satu lajur, yang akan dibandingkan dengan A_ID dalam pertanyaan utama. Sebab had ini wujud ialah fungsi subkueri adalah untuk mengembalikan senarai nilai untuk menyemak sama ada A_ID dalam pertanyaan utama sepadan dengan sebarang nilai dalam hasil subkueri.
Untuk menyelesaikan masalah ini, ubah suai subquery untuk mengembalikan hanya lajur A_ID, yang akan dibandingkan dengan A_ID dalam klausa WHERE IN pertanyaan utama. Selain itu, pengisihan boleh digunakan dalam klausa ORDER untuk memilih baris daripada subkueri tanpa mengembalikan COUNT sebagai lajur.
Contoh pertanyaan yang diperbetulkan:
<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>
Dengan melaksanakan perubahan ini, pertanyaan boleh mengembalikan hasil yang diingini dengan betul sambil mematuhi peraturan mengembalikan satu lajur untuk perbandingan WHERE IN.
Atas ialah kandungan terperinci Mengapa Subquery SQL Saya Mengembalikan 'Hanya satu ungkapan boleh ditentukan dalam senarai pilih apabila subquery tidak diperkenalkan dengan EXISTS'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!