UNION 演算子を利用するクエリを実行する場合、関係するすべての個々の SELECT ステートメントが次の条件に準拠していることを確認することが不可欠です。 2 つの基本的な基準:
提供されたクエリの検討:
<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 サイトの他の関連記事を参照してください。