このクエリ(最小バージョン)を使用して、テーブルから一部のデータをフィルタリングしています
SELECT DISTINCT
t.name AS tname,
CASE WHEN (t.task_group != -1) THEN (SELECT p.keyid FROM proyects AS p, task_groups AS tg WHERE tg.keyid = t.task_group AND tg.proyect = p.keyid) ELSE -1 END AS pkeyid
FROM tasks AS t, task_users AS tu
WHERE (t.status = '0' OR t.status = '1' OR t.status = '3') AND (t.keyid = tu.task) AND ((tu.worker = 5));
クエリは完全に機能します。しかし今、私は次のようにしていくつかの行をフィルタリングしたいと思います。
SELECT DISTINCT
t.name AS tname,
CASE WHEN (t.task_group != -1) THEN (SELECT p.keyid FROM proyects AS p, task_groups AS tg WHERE tg.keyid = t.task_group AND tg.proyect = p.keyid) ELSE -1 END AS pkeyid
FROM tasks AS t, task_users AS tu
WHERE (t.status = '0' OR t.status = '1' OR t.status = '3') AND (t.keyid = tu.task) AND ((tu.worker = 5)) AND ((pkeyid = 7) OR (pkeyid = 8) OR (pkeyid = 16))
構文エラー「不明な列 'pkeyid' in'where句 '」が表示されます
これが発生している理由を理解できます(pkeyidはfrom句のどのテーブルの列でもありません)。これを回避する簡単な方法はありますか?または、クエリ全体を書き直す必要がありますか?
where句でエイリアス名を使用することはできません。何かをフィルタリングする際に使用する場合は、have句を使用する必要があります。
SELECT DISTINCT
t.name AS tname,
CASE WHEN (t.task_group != -1) THEN (SELECT p.keyid FROM proyects AS p, task_groups AS tg WHERE tg.keyid = t.task_group AND tg.proyect = p.keyid) ELSE -1 END AS pkeyid
FROM tasks AS t, task_users AS tu
WHERE
(t.status = '0' OR t.status = '1' OR t.status = '3')
AND t.keyid = tu.task
AND tu.worker = 5
having
pkeyid = 7 or pkeyid = 8 or pkeyid = 16
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加