我有两个表“合同”和“工人”。我需要找到剩下最多假期的工人。但是,我只需要打印他的名字,而不是假期。
方案
合同号:
Contract_ID (PK)
Worker_ID (FK)
holidays
工人
Worker_ID (PK)
Name
样品数据:
合同x1c 0d1x
工人
编号
目前我用以下代码打印信息:
EDIT:下面的SQL代码是错误的!它显示Fegelein
,即使Klink
是假期最多的人。
SELECT W.Name, MAX(C.Holidays) As Holidays
FROM worker AS W, contract AS C
WHERE W.Worker_ID = C.Worker_ID
结果:
Name Holidays
Fegelein 31
预期结果:
Name
Fegelein
SQL小提琴:http://sqlfiddle.com/#!9/a840b/17
所以我需要隐藏第二个选择MAX(C.Holidays) As Holidays
。这可能吗?
4条答案
按热度按时间isr3a4wc1#
FROM
子句中使用逗号。* 总是 * 使用正确、明确的JOIN
语法。或者,正如我昨天看到的一条评论所暗示的那样......JOIN
是现代世界。如果只需要一个这样的工作线程,则使用
LIMIT
:holiday
的最小值。如果它是最小值(如您的问题所建议),则使用ORDER BY c.Holidays ASC
。据推测,工人可能有多个合同,因此您可能需要聚合。但是,这并不清楚。
这是一个SQL Fiddle。
fzsnzjdm2#
只需尝试:
如果只需要一个结果,可以添加
LIMIT 1
。nr7wwzry3#
我觉得这应该能帮你。
从选择属性中删除Holidays并将其限制为1,然后orderby Holidays执行此操作
kmbjn2e34#
选择姓名(选择w.,c. 从工人w加入合同c,w.工人_id=c.工人_id)其中假期=(选择合同中的最大(假期));
看看这个最简单的方法。