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
Lepaskan: 2025-01-11 13:22:41
asal
632 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan