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
Susan Sarandonasal
2025-01-11 13:26:42714semak imbas

Why Does My SQL Subquery Return

Ralat Subkueri SQL: Ungkapan Tunggal dalam Senarai PILIH

Pertanyaan SQL ini menjana ralat:

<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>

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:

<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>

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:
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