2010-09-10 38 views
0

我試圖使用以下查詢,並且如果它只有一個having語句它按預期方式工作。如果我添加第二個having聲明它不起作用。MySQL查詢 - 有多個語句不工作

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

這裏不需要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 
+0

我最初嘗試過,但因爲funding_band_value和qualification_level_value是別名,所以他們不能在WHERE子句中使用......? – user444501 2010-09-10 15:47:14

+0

您不使用別名,您使用原始列名稱,因爲我已經完成(移動到ON子句)。 – RedFilter 2010-09-10 15:48:11

+0

我的不好,發現缺少'ON' cluase,已經更新了查詢。 – RedFilter 2010-09-10 15:49:29

1

HAVING行爲類似於WHERE或GROUP BY。您引用一次即可開始使用它,並將多個語句與AND或OR運算符結合使用。深入查看查詢解析器可能會給你一個更明確的答案。