ホームページ >データベース >mysql チュートリアル >MySQL クエリが「オペランドには 1 つの列を含める必要があります」を返すのはなぜですか? それを修正するにはどうすればよいですか?

MySQL クエリが「オペランドには 1 つの列を含める必要があります」を返すのはなぜですか? それを修正するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-12 15:06:471069ブラウズ

Why Does My MySQL Query Return

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 つの列 (usernameid) を選択し、外側のクエリはサブクエリが 1 つの列のみを返すことを期待しているために発生します。

解決策:

このエラーを解決するには 2 つの方法があります:

  1. サブクエリの変更:

    • username 列または id 列のみを返すようにサブクエリを変更します。
  2. 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。