ホームページ > データベース > mysql チュートリアル > UNION 操作で「エラー: 使用された SELECT ステートメントの列数が異なります」を解決するにはどうすればよいですか?

UNION 操作で「エラー: 使用された SELECT ステートメントの列数が異なります」を解決するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-30 12:02:26
オリジナル
275 人が閲覧しました

How to Resolve

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

UNION 操作など、複数の SELECT ステートメントを含むクエリを実行する場合、必須です。各ステートメントに正確に同じ数の列が含まれていることを確認します。これを行わないと、「エラー: 使用された 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)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2  = 1) AND (friends.fid1 < 1)
ORDER BY RAND()
LIMIT 6;
ログイン後にコピー

では、最初の SELECT には 4 つの列 (""、u1.、u2.*) が含まれているのに対し、2 番目の SELECT には 4 つの列しか含まれていないため、このエラーが発生します。単一の列 ("fid2") を返します。

意図した機能を保持する、より簡単な書き換えは次のとおりです。

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;
ログイン後にコピー

両方の SELECT ステートメントが一致する同じ数の列を返すようにすることで、データ型の場合、列数エラーが発生することなくクエリを実行できます。さらに、提供されたスキーマに基づいて冗長に見える不要な外部結合が排除されます。

以上がUNION 操作で「エラー: 使用された SELECT ステートメントの列数が異なります」を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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