UNION 演算子を使用するクエリを実行する場合は、関係するすべての個々の SELECT ステートメントが次の条件に準拠していることを確認することが不可欠です。 2 つの基本的な基準:
提供されたクエリの検討:
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 このエラー メッセージは、UNION で結合された 2 つの SELECT ステートメント間の列数の不一致を示しています。具体的には、最初の SELECT ステートメントは関係するテーブルのすべての列を返しますが、2 番目の SELECT ステートメントは fid2 列のみをフェッチします。
解決策
この問題を解決するには、2 番目の SELECT ステートメントを次のように変更する必要があります。最初のステートメントの列数と一致します。最も簡単な方法は、必要な列をすべて明示的に含めることです:
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 あるいは、UNION ALL 演算子を使用すると、さまざまな列数の SELECT ステートメントが許可されます。ただし、一致しない列は NULL 値で埋められるため、すべての場合において望ましいとは限りません。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3