基本的な問題は - WHERE CASE文でサブクエリのカウントを変数として使用しようとしていますが、使用するようには見えません。 SELECT COUNT(id)...ステートメントをWHEREエリアに置いたときに多少は機能していますが、もしそれを行うと、私はそれを3-4回別々に含める必要があります。それをSELECTに入れることができます。CASEでMySQL '変数'を使用できない
以下は、私の問題を説明する変更された例のクエリです。それは私が使用している正確なクエリではありませんが、それは私のずっと-長い/より複雑なクエリと同じエラーを与える:
エラー:
[のErr] 1054 - 不明な列「matched_sections」で " where句」
問合せ:
SELECT
articles.id,
(SELECT COUNT(id) FROM site_areas_site_sections WHERE
site_areas_site_sections.site_area_id = 8) AS matched_sections
FROM
articles
LEFT JOIN
articles_site_sections ON articles_site_sections.article_id = articles.id
LEFT JOIN
site_areas_site_sections ON articles_site_sections.site_section_id =
site_areas_site_sections.site_section_id
WHERE
(CASE
WHEN
matched_sections > 0
THEN
site_sections.id = site_areas_site_sub_sections.site_sub_section_id
END
)
WHERE句の評価時に 'matched_section'カラムが存在しないこと以外は、CASE式に別の問題があるようです。これは、FROM句( 'site_areas_site_sub_sections')のどこにも見つからないテーブルを参照します。 –
@Andriy M、上記のsqlは "私の問題を説明する変更されたサンプルクエリ"であり、おそらく他の必要なビットを入れたり除外したりするのを忘れていた可能性があります。 – Dirk