Bagaimana untuk Menyelesaikan Ralat \'Bilangan Lajur Berbeza dalam Penyata Pilihan\' Semasa Menggunakan UNION?

Linda Hamilton
Lepaskan: 2024-10-30 19:52:30
asal
356 orang telah melayarinya

How to Resolve the

Ralat: Kiraan Lajur Berbeza dalam Penyata Pilihan

Apabila melaksanakan pertanyaan yang menggunakan pengendali UNION, adalah penting untuk memastikan bahawa semua pernyataan SELECT individu yang terlibat mematuhi dua kriteria asas:

  1. Kiraan Lajur Padanan: Setiap penyataan SELECT mesti menghasilkan bilangan lajur yang sama dalam set hasil yang diambil.
  2. Data Konsisten Jenis: Jenis data lajur yang sepadan merentas pernyataan SELECT yang berbeza harus diselaraskan.

Analisis Masalah

Memandangkan pertanyaan yang diberikan:

<code class="sql">SELECT * FROM friends
LEFT JOIN users AS u1 ON users.uid = friends.fid1
LEFT JOIN users AS u2 ON users.uid = friends.fid2
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1 < 1)
ORDER BY RAND()
LIMIT 6;
Salin selepas log masuk

mesej ralat menunjukkan percanggahan dalam kiraan lajur antara dua pernyataan SELECT yang disertai oleh UNION. Khususnya, pernyataan SELECT pertama mengembalikan semua lajur daripada jadual yang terlibat, manakala yang kedua hanya mengambil lajur fid2.

Penyelesaian

Untuk menyelesaikan isu ini, pernyataan SELECT kedua harus diubah suai kepada padankan kiraan lajur pernyataan pertama. Pendekatan paling mudah ialah memasukkan semua lajur yang dikehendaki secara eksplisit:

<code class="sql">   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid2
    WHERE f.fid1 = 1 
      AND f.fid2 > 1
UNION 
   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid1
    WHERE f.fid2  = 1 
      AND f.fid1 < 1
ORDER BY RAND()
LIMIT 6;</code>
Salin selepas log masuk

Sebagai alternatif, seseorang boleh menggunakan operator UNION ALL, yang membenarkan penyataan SELECT dengan jumlah lajur yang berbeza-beza. Walau bagaimanapun, lajur yang tidak sepadan akan diisi dengan nilai NULL, yang mungkin tidak diingini dalam semua kes.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Bilangan Lajur Berbeza dalam Penyata Pilihan\' Semasa Menggunakan UNION?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!