2015-03-30 31 views
0

哪家商店注册的工人比实际能力多?哪家商店注册的工人比实际能力多?

我有三个表

Shop(shopid,shopname,shopcapacity) 
Workers(workerid,name,address) 
Registration(regid,workerid,shopid,fromdate,todate) 

我想下面的查询,它适用于具有比其身份登记的更多的工人一个店 - 但它不工作的每家商店,任何人都可以提出?

select shopname AS ShopName, 
shopcapacity AS ShopCapacity, 
count(r.shopid) AS RegisteredWorkers 
from shop f 
inner join registration r 
on f.shopid = r.shopid 
where f.shopcapacity < ANY (select count(shopid) 
from registration 
group by shopid) 
group by r.shopid; 

回答

0

类似下面应该做的伎俩:

SELECT 
    shopname 
FROM 
    shop 
    LEFT OUTER JOIN registration reg on 
     shop.shopid = reg.shopid 
    LEFT OUTER JOIN workers on 
     reg.workerid = workers.workerid 
WHERE CURDATE() BETWEEN reg.fromdate and reg.todate 
HAVING count(distinct workerid) > shopcapacity 
GROUP BY shopname, shopcapacity 

我加了位与WHERE CURDATE()...,因为它看起来像你的registration表是对时间敏感的。

无论如何,这里的HAVING语句将检查是否当前注册工人的数量比shopcapacity更大。 GROUP BY确保数据库汇总在shopnameshopcapacity之间。

+0

我试过这个不工作! ,一些语法错误,我甚至感动到了语句的结尾。 – ron 2015-03-30 20:47:57

+0

你遇到什么语法错误? – JNevill 2015-03-30 21:38:25

+0

正确的语法使用附近(不同的workerid)> shopcapacity,检查MYSQL手册 – ron 2015-03-30 22:21:44