2012-03-30 57 views
0

我简化了以下mysql查询,它将table1中的主键作为table2中的外键出现的次数。根据用户定义的限制选择外键的数量

SELECT table1.*, COUNT(table2.id) AS 'value' 

FROM table1 INNER JOIN table2 ON table1.id = table2.id 

WHERE table1.lastname LIKE 'smith' 

WHERE table1.firstname LIKE 'john' 

GROUP BY table2.id; 

我想修改它,使它只选择那些超过一定的阈值数,也就是说,如果发生John Smith的ID在表2的10倍,而我的阈值是20,他的纪录会不会选择。

+0

您不能组只用table2.id.All您的选择列,应在组中使用的语句。 – Teja 2012-03-30 16:18:50

+0

不,他们不应该。 – MichaelRushton 2012-03-30 16:27:49

+0

@deathonater,我把它'table2.id'不是唯一的? – MichaelRushton 2012-03-30 16:28:14

回答

0
GROUP BY table2.id 
    HAVING COUNT(table2.id) >= @Threshold 
+0

工作就像一个魅力!非常感谢! – deathonater 2012-03-30 17:26:19

0
SELECT table1.*,table2.value as value 
FROM table1, 
(
SELECT table2.id, COUNT(table2.id) AS 'value' 

FROM table1 INNER JOIN table2 ON table1.id = table2.id 

WHERE table1.lastname LIKE 'smith' AND table1.firstname LIKE 'john' 

GROUP BY table2.id 
HAVING COUNT(table2.id)>=20 
) table2 
WHERE table1.id=table2.id; 
+0

谢谢,但这不是我想做的事情,即使在使用非常特定的参数时,它似乎也会返回大量数据。 – deathonater 2012-03-30 17:19:52

+0

你可以发布一些示例数据和所需的o/p .. – Teja 2012-03-30 17:23:01