Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Menyelesaikan Ralat \"Bilangan Lajur Berbeza dalam Penyata Pilihan\" Semasa Menggunakan UNION?

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

Linda Hamilton
Linda Hamiltonasal
2024-10-30 19:52:30357semak imbas

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;

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>

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!

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