Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan \'Ralat: Penyataan SELECT yang digunakan mempunyai bilangan lajur yang berbeza\' dalam Operasi UNION?

Bagaimana untuk Menyelesaikan \'Ralat: Penyataan SELECT yang digunakan mempunyai bilangan lajur yang berbeza\' dalam Operasi UNION?

Susan Sarandon
Susan Sarandonasal
2024-10-30 12:02:26266semak imbas

How to Resolve

Ralat: Percanggahan dalam Kiraan Lajur dalam Penyata SELECT

Apabila melaksanakan pertanyaan yang melibatkan berbilang pernyataan SELECT, seperti operasi UNION, adalah penting untuk memastikan bahawa setiap pernyataan mengandungi bilangan lajur yang sama. Kegagalan berbuat demikian akan mengakibatkan ralat "Ralat: Pernyataan SELECT yang digunakan mempunyai bilangan lajur yang berbeza".

Untuk menyelesaikan isu ini, pertanyaan perlu ditulis semula supaya setiap klausa SELECT mempunyai nombor yang sama lajur dengan jenis data yang serasi. Sebagai contoh, pertanyaan yang disediakan:

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;

mengalami ralat ini kerana SELECT pertama mengandungi 4 lajur ("", u1., u2.*), manakala SELECT kedua sahaja mengembalikan satu lajur ("fid2").

Tulisan semula yang lebih mudah yang mengekalkan fungsi yang dimaksudkan ialah:

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;

Dengan memastikan kedua-dua pernyataan SELECT mengembalikan bilangan lajur yang sama dengan padanan jenis data, pertanyaan boleh dilaksanakan tanpa menghadapi ralat kiraan lajur. Selain itu, ia menghapuskan cantuman luar yang tidak diperlukan, yang kelihatan berlebihan berdasarkan skema yang disediakan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan \'Ralat: Penyataan SELECT yang digunakan mempunyai bilangan lajur yang berbeza\' dalam Operasi 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