Rumah > pangkalan data > tutorial mysql > Mengapa Subquery SQL Saya Kembali 'Hanya satu ungkapan boleh ditentukan dalam senarai pilih apabila subquery tidak diperkenalkan dengan EXISTS?'

Mengapa Subquery SQL Saya Kembali 'Hanya satu ungkapan boleh ditentukan dalam senarai pilih apabila subquery tidak diperkenalkan dengan EXISTS?'

Susan Sarandon
Lepaskan: 2025-01-11 13:26:42
asal
713 orang telah melayarinya

Why Does My SQL Subquery Return

Ralat Subkueri SQL: Ungkapan Tunggal dalam Senarai PILIH

Pertanyaan SQL ini menjana ralat:

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

Mesej ralat, "Hanya satu ungkapan boleh ditentukan dalam senarai pilih apabila subkueri tidak diperkenalkan dengan EXISTS," menunjukkan masalah dengan klausa SELECT subkueri. Subkueri cuba mengembalikan dua lajur: A_ID dan COUNT(DISTINCT dNum). Apabila menggunakan IN (atau operator perbandingan lain seperti =, !=, dsb.), senarai SELECT subkueri mesti mengandungi hanya satu lajur.

Penyelesaian:

Pertanyaan yang dibetulkan harus kembali hanya A_ID daripada subkueri:

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

Perhatikan perubahan:

  • Klausa SELECT subkueri kini hanya termasuk A_ID.
  • Klausa ORDER BY, yang sebelum ini berada dalam subkueri, telah dialihkan ke pertanyaan luar. Ini kerana ORDER BY asal sedang cuba mengisih hasil subkueri sebelum digunakan dalam klausa IN; pengisihan hendaklah digunakan pada set keputusan akhir.

Pertanyaan yang disemak ini dengan betul memilih kiraan nilai dNum yang berbeza dengan A_ID ditemui dalam hasil subkueri. Subkueri mengenal pasti 10% teratas nilai A_ID dengan cekap berdasarkan kiraan dNum yang berbeza, dan pertanyaan luar kemudian mengira nilai dNum berbeza yang dikaitkan dengan A_ID yang dipilih. Klausa ORDER BY akhir mengisih hasil berdasarkan kiraan nilai dNum yang berbeza.

Atas ialah kandungan terperinci Mengapa Subquery SQL Saya Kembali '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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan