Rumah > pangkalan data > tutorial mysql > Mengapa Pertanyaan SQL Saya Menghasilkan Ralat 'Pengecam Berbilang Bahagian Tidak Dapat Diikat'?

Mengapa Pertanyaan SQL Saya Menghasilkan Ralat 'Pengecam Berbilang Bahagian Tidak Dapat Diikat'?

Susan Sarandon
Lepaskan: 2025-01-17 03:46:11
asal
708 orang telah melayarinya

Why Does My SQL Query Produce a

Menyelesaikan ralat "Pengecam berbilang tidak boleh terikat"

Ralat pertanyaan SQL "Pengecam berbilang bahagian 'a.maxa' tidak boleh terikat" menunjukkan konflik apabila mencampurkan cantuman tersirat dan eksplisit. Berikut adalah penjelasan terperinci:

Campurkan gabungan tersirat dan tersurat

Dalam pertanyaan yang disediakan, kedua-dua cantuman tersirat (jadual dipisahkan koma) dan cantuman eksplisit (kata kunci JOIN) digunakan. Walaupun ini dibenarkan, ia perlu dikendalikan dengan teliti untuk mengelakkan isu yang mengikat.

Memahami keutamaan sambungan

Sambungan eksplisit diutamakan daripada sambungan tersirat. Ini bermakna gabungan yang ditentukan menggunakan kata kunci JOIN akan dilakukan sebelum gabungan tersirat.

Rujukan alias tidak sah

Dalam pertanyaan anda, anda cuba melakukan cantuman tersirat antara hasil cantuman eksplisit antara jadual a dan b dan dkcd jadual lain. Walau bagaimanapun, disebabkan keutamaan gabungan eksplisit, jadual a tidak tersedia apabila cuba merujuk a.maxa menggunakan klausa ON dkcd. Di sinilah datangnya mesej ralat.

Tulis semula pertanyaan

Untuk menyelesaikan isu ini, anda perlu menulis semula pertanyaan menggunakan sintaks gabungan yang konsisten. Satu penyelesaian yang mungkin adalah dengan hanya menggunakan gabungan eksplisit:

<code class="language-sql">SELECT DISTINCT
  a.maxa,
  b.mahuyen,
  a.tenxa,
  b.tenhuyen,
  ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa AS a
INNER JOIN quanhuyen AS b ON LEFT(a.maxa, 2) = b.mahuyen
LEFT OUTER JOIN (
  SELECT
    maxa,
    COUNT(*) AS tong
  FROM khaosat
  WHERE CONVERT(datetime, ngaylap, 103) BETWEEN '2011年9月1日' and '2011年9月5日'
  GROUP BY maxa
) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa  '99'
ORDER BY a.maxa;</code>
Salin selepas log masuk

Dalam pertanyaan ini, semua gabungan adalah eksplisit dan nama jadual layak menggunakan alias dalam semua kes. Ini memastikan bahawa rujukan kepada a.maxa dalam klausa ON dkcd adalah sah.

Penjelasan pada klausa ORDER BY

Seperti yang dicadangkan oleh @Aaron Bertrand, adalah disyorkan untuk melayakkan diri maxa dengan alias a khusus dalam klausa ORDER BY:

<code class="language-sql">ORDER BY a.maxa;</code>
Salin selepas log masuk

Ini memastikan pengisihan dilakukan pada lajur yang betul. Format tarikh juga telah dilaraskan untuk memudahkan pemahaman.

Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Menghasilkan Ralat 'Pengecam Berbilang Bahagian Tidak Dapat Diikat'?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan