我正在尝试使用以下查询,如果它只有一个having
语句,则按预期工作。如果我添加第二个having
语句则不起作用。
SELECT candidate.first_name,
candidate.last_name,
qualification.code,
property.value AS funding_band_value,
qualification.funding_band,
property.value AS qualification_level_value,
qualification.qualification_level_id
FROM candidate_qualification, candidate, qualification, property
WHERE candidate_qualification.candidate_id=candidate.id and
candidate_qualification.qualification_id=qualification.id
HAVING funding_band_value = (select property.value from property where qualification.funding_band=property.id) and
HAVING qualification_level_value = (select property.value from property where qualification.qualification_level_id=property.id)
有人可以解释为什么这不起作用以及我应该怎么做。
答案 0 :(得分:1)
HAVING的行为与WHERE或GROUP BY类似。您引用它一次以开始使用它并将多个语句与AND或OR运算符组合。深入了解查询解析器可能会给您一个更明确的答案。
答案 1 :(得分:0)
您不需要在这里使用HAVING,只需使用AND,因此它是WHERE子句的一部分。
子查询不是必需的,这些表已经加入。
这样的事情应该更接近你想要的东西:
SELECT c.first_name,
c.last_name,
q.code,
p.value AS funding_band_value,
q.funding_band,
p.value AS qualification_level_value,
q.qualification_level_id
FROM candidate_qualification cq
INNER JOIN candidate c ON cq.candidate_id=c.id
INNER JOIN qualification q ON cq.qualification_id=q.id
INNER JOIN property p ON q.funding_band=p.id
and q.qualification_level_id=p.id