1. ホーム
  2. データベース
  3. マイサク

[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。

2021-12-28 06:10:48

質問

最近、次のような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

PDOを使用しているので、PHPのコードによってバインドされています。2は":cat"の有効な値です。

このコードを実行すると、エラーが発生します。

#1241 - Operand should contain 1 column(s)

このコードからは、列を選択し、別のテーブルからさらに2つ選択して、続けることに何の問題もないように見えますが...。

どのように解決するのですか?

サブクエリは2つのカラムを選択していますが、あなたは1つのカラムを投影するためにサブクエリを使用しています(外側の SELECT 節があります)。このようなクエリからは、この文脈では1つのカラムしか選択できません。

に結合することを考える。 users テーブルから取得するカラムをより柔軟に選択することができます。 users .

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