Mysql:WHERE语句取决于列的COUNT()?

时间:2011-09-15 13:10:58

标签: mysql sql

我已经在SO上阅读了很多答案,但仍然无法使其发挥作用。我很确定我需要一个子查询,但不知道我应该从哪里开始...

这是我想要做的可读/伪装:

SELECT DISTINCT cat_sub.*, COUNT(job.job_id) AS num_properties_which_meet_criteria
FROM cat_sub
LEFT JOIN job_cat USING (sc_id)
LEFT JOIN job USING (job_id)
WHERE job.village_id=2 AND num_properties_which_meet_criteria > 0
GROUP BY sc_id 

我正在尝试使WHERE引用job表中的有效结果数量,在这个例子中是job.village_id=2匹配的结果。

所以只是为了说清楚,我不希望连接匹配的总行数。我希望连接匹配的总行数达到WHERE条件。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:6)

使用HAVING子句测试聚合函数的值。

SELECT DISTINCT cat_sub.*, COUNT(job.job_id) AS num_properties_which_meet_criteria
FROM cat_sub
LEFT JOIN job_cat USING (sc_id)
LEFT JOIN job USING (job_id)
WHERE job.village_id=2 
GROUP BY sc_id
HAVING COUNT(job.job_id) > 0

答案 1 :(得分:3)

使用having代替where

WHERE job.village_id=2
GROUP BY sc_id 
HAVING num_properties_which_meet_criteria > 0

答案 2 :(得分:2)

你有没有尝试过:

SELECT DISTINCT cat_sub.*, COUNT(job.job_id)
FROM cat_sub
LEFT JOIN job_cat USING (sc_id)
LEFT JOIN job USING (job_id)
WHERE job.village_id=2 
GROUP BY sc_id 
HAVING COUNT(job.job_id) > 0

更新:删除了别名

答案 3 :(得分:2)

您需要有一个“HAVING”子句,在那里您可以使用查询的SELECT部分​​中使用的聚合函数的条件。