エラー: 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 サイトの他の関連記事を参照してください。