UNION 使用時の「Select ステートメントの列数が異なる」エラーを解決するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-30 19:52:30
オリジナル
356 人が閲覧しました

How to Resolve the

エラー: SELECT ステートメント内の異なる列数

UNION 演算子を利用するクエリを実行する場合、関係するすべての個々の SELECT ステートメントが次の条件に準拠していることを確認することが不可欠です。 2 つの基本的な基準:

  1. 一致する列数: 各 SELECT ステートメントは、取得された結果セット内で同じ数の列を生成する必要があります。
  2. 一貫したデータタイプ: 異なる 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;
ログイン後にコピー

エラー メッセージは、UNION で結合された 2 つの SELECT ステートメント間の列数の不一致を示します。具体的には、最初の SELECT ステートメントは関係するテーブルのすべての列を返しますが、2 番目の SELECT ステートメントは fid2 列のみをフェッチします。

解決策

この問題を解決するには、2 番目の 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>
ログイン後にコピー

あるいは、UNION ALL 演算子を使用して、さまざまな列数の SELECT ステートメントを許可します。ただし、一致しない列は NULL 値で埋められるため、すべての場合において望ましいとは限りません。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!