Rumah >pangkalan data >tutorial mysql >Mengapa Subquery SQL Saya dalam Klausa WHERE IN Mengembalikan 'Hanya Satu Ungkapan Boleh Ditentukan dalam Senarai Pilihan'?

Mengapa Subquery SQL Saya dalam Klausa WHERE IN Mengembalikan 'Hanya Satu Ungkapan Boleh Ditentukan dalam Senarai Pilihan'?

DDD
DDDasal
2025-01-11 13:22:41634semak imbas

Why Does My SQL Subquery in a WHERE IN Clause Return

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!

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