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

Susan Sarandon
リリース: 2024-11-03 21:47:30
オリジナル
368 人が閲覧しました

How to Fix

エラー: 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 ステートメントが次の要件に従う必要があります:

  • 一致する列数: 各 SELECT ステートメントは、同じ数の列です。
  • 一致する列のデータ型: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート