Ralat: Kiraan Lajur Discordant dalam Penyata SELECT
Dalam MySQL, UNION dan UNION ALL operasi menuntut pernyataan SELECT yang mengambil bahagian mempunyai nombor yang sama lajur dalam klausa SELECT mereka. Selain itu, jenis data lajur mesti sepadan pada setiap kedudukan.
Pertanyaan yang disediakan melanggar peraturan ini:
<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;
Pernyataan SELECT pertama mengembalikan semua lajur daripada "rakan" dan " pengguna", manakala pernyataan SELECT kedua hanya mengembalikan lajur "fid2" daripada jadual "rakan". Percanggahan dalam kiraan lajur ini membawa kepada mesej ralat berikut:
<code class="error">ERROR 1222 (21000): The used SELECT statements have a different number of columns from the following:
Untuk menyelesaikan ralat, pastikan semua pernyataan SELECT dalam operasi UNION mempunyai bilangan lajur yang sama. Cara paling mudah untuk mencapai ini adalah dengan menggunakan senarai lajur yang jelas dalam setiap pernyataan SELECT:
<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>
Dengan menyatakan secara eksplisit lajur dalam setiap pernyataan SELECT, MySQL boleh memastikan bahawa kiraan lajur dan jenis data sepadan, membolehkan operasi KESATUAN untuk diteruskan tanpa kesilapan.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan \'Ralat 1222 (21000): Penyataan SELECT yang digunakan mempunyai bilangan lajur yang berbeza\' dalam Operasi MySQL UNION?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!