ホームページ >データベース >mysql チュートリアル >MySQL UNION オペレーションで「エラー 1222 (21000): 使用された SELECT ステートメントの列数が異なります」を修正する方法は?

MySQL UNION オペレーションで「エラー 1222 (21000): 使用された SELECT ステートメントの列数が異なります」を修正する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-29 01:41:30252ブラウズ

How to Fix

エラー: SELECT ステートメントの不一致カラム数

MySQL では、UNION および UNION ALL 操作では、参加している SELECT ステートメントが同じ番号を持っていることが要求されます。 SELECT 句内の列の数。さらに、列のデータ型は各位置で対応している必要があります。

指定されたクエリは次のルールに違反しています:

<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;

最初の SELECT ステートメントは、「friends」と「」からのすべての列を返します。一方、2 番目の SELECT ステートメントは、「friends」テーブルの「fid2」列のみを返します。この列数の不一致により、次のエラー メッセージが表示されます。

<code class="error">ERROR 1222 (21000): The used SELECT statements have a different number of columns from the following:

このエラーを解決するには、UNION 操作のすべての SELECT ステートメントの列数が同じであることを確認してください。これを実現する最も簡単な方法は、各 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>

各 SELECT ステートメントでカラムを明示的に指定することで、MySQL はカラム数とデータ型が一致していることを確認し、 UNION 操作はエラーなしで続行されます。

以上がMySQL UNION オペレーションで「エラー 1222 (21000): 使用された SELECT ステートメントの列数が異なります」を修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。