ホームページ >データベース >mysql チュートリアル >MySQL クエリが「オペランドには 1 つの列を含める必要があります」を返すのはなぜですか? それを修正するにはどうすればよいですか?
MySQL クエリ エラー: 「オペランドには 1 列を含める必要があります」
問題の説明:
複数のテーブルを結合し、サブクエリ (別のテーブルから列を選択) を含む MySQL クエリを実行中に、「#1241 - オペランドには 1 つの列を含める必要があります」というエラーが発生しました。
クエリ:
<code class="language-sql">SELECT topics.id, topics.name, topics.post_count, topics.view_count, COUNT( posts.solved_post ) AS solved_post, (SELECT users.username AS posted_by, users.id AS posted_by_id FROM users WHERE users.id = posts.posted_by) FROM topics LEFT OUTER JOIN posts ON posts.topic_id = topics.id WHERE topics.cat_id = :cat GROUP BY topics.id</code>
エラーの理由:
エラーは、サブクエリが users
テーブルから 2 つの列 (username
と id
) を選択し、外側のクエリはサブクエリが 1 つの列のみを返すことを期待しているために発生します。
解決策:
このエラーを解決するには 2 つの方法があります:
サブクエリの変更:
username
列または id
列のみを返すようにサブクエリを変更します。 users
テーブルに接続します:
posted_by
列を使用して users
テーブルを posts
テーブルに直接結合します。このアプローチにより、users
テーブルから必要な列を選択する際の柔軟性が高まります。 変更されたクエリ:
サブクエリを使用します:
<code class="language-sql">SELECT topics.id, topics.name, topics.post_count, topics.view_count, COUNT( posts.solved_post ) AS solved_post, (SELECT users.username AS posted_by FROM users WHERE users.id = posts.posted_by) FROM topics LEFT OUTER JOIN posts ON posts.topic_id = topics.id WHERE topics.cat_id = :cat GROUP BY topics.id</code>
接続を使用します:
<code class="language-sql">SELECT topics.id, topics.name, topics.post_count, topics.view_count, COUNT( posts.solved_post ) AS solved_post, users.username AS posted_by, users.id AS posted_by_id FROM topics LEFT OUTER JOIN posts ON posts.topic_id = topics.id LEFT OUTER JOIN users ON users.id = posts.posted_by WHERE topics.cat_id = :cat GROUP BY topics.id</code>
以上がMySQL クエリが「オペランドには 1 つの列を含める必要があります」を返すのはなぜですか? それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。