MySQL - オペランドには1つの列が含まれている必要があります 質問する

MySQL - オペランドには1つの列が含まれている必要があります 質問する

作成中のシステムで作業しているときに、プロジェクトで次のクエリを使用しようとしました。

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 を使用しているため、「:cat」は PHP コードによってバインドされています。「:cat」の有効な値は 2 です。

しかし、そのクエリではエラーが発生します: 「#1241 - オペランドには 1 列が含まれている必要があります」

困惑しているのは、このクエリは問題なく動作するだろうと思うことです。列を選択し、別のテーブルからさらに 2 つ選択し、そこから続行します。何が問題なのかまったくわかりません。

これに対する簡単な修正方法、またはクエリを記述する別の方法はありますか?

ベストアンサー1

サブクエリは 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

おすすめ記事