エラー: UNION 化された SELECT ステートメント間の列数の不一致
指定されたクエリで、エラーが発生しました: 「ERROR 1222 (21000)」 : 使用された SELECT ステートメントの列数が異なります。」このエラーは、UNION ステートメント内の SELECT ステートメントが等しくない列数を返した場合に発生します。
クエリの最初の SELECT ステートメント:
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)
は 3 つの列を返します: friends.fid1 、friends.fid2、および結合されたユーザー テーブルの列 (u1 および u2)。ただし、2 番目の SELECT ステートメント:
SELECT fid2 FROM friends WHERE (friends.fid2 = 1) AND (friends.fid1 < 1)
は 1 つの列のみを返します: friends.fid2.
列一致の UNION 要件
UNION 操作が成功するには、結合されるすべての SELECT ステートメントが次の要件に従う必要があります:
解決策
このエラーを解決するには、UNION 操作のすべての SELECT ステートメントが、データ型が一致する同じ数の列を返すようにする必要があります。たとえば、クエリを次のように書き換えることができます。
SELECT friends.*, u.* FROM friends JOIN users AS u ON u.uid = friends.fid2 WHERE friends.fid1 = 1 AND friends.fid2 > 1 UNION SELECT friends.*, u.* FROM friends JOIN users AS u ON u.uid = friends.fid1 WHERE friends.fid2 = 1 AND friends.fid1 < 1 ORDER BY RAND() LIMIT 6;
この修正されたクエリでは、両方の SELECT ステートメントがデータ型が一致する同じ数の列 (5 つ) を返し、エラーが解決されます。
以上がUNION ステートメントの「エラー 1222 (21000): 使用された SELECT ステートメントの列数が異なります」を修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。