이 쿼리 (최소 버전)를 사용하여 테이블에서 일부 데이터를 필터링하고 있습니다.
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))
구문 오류 " 'where clause'의 Unknown column 'pkeyid'"가 나타납니다.
왜 이런 일이 발생하는지 이해할 수 있습니다 (pkeyid는 from 절의 테이블에있는 열이 아닙니다). 이것에 대한 간단한 방법이 있습니까? 아니면 전체 쿼리를 다시 작성해야합니까?
where 절에는 별칭 이름을 사용할 수 없으며 필터링에 사용하려면 having 절을 사용해야합니다.
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] 삭제
몇 마디 만하겠습니다