我有两个表“合同”和“工人”。我需要找到剩下的假期最多的工人。但是,我只需要打印他的名字,而不是假期。
架构
合同:
Contract_ID (PK)
Worker_ID (FK)
holidays
工人
Worker_ID (PK)
Name
样本数据:
代码
目前我使用以下代码打印信息:
编辑:下面的 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
。这可能吗?
原文由 Black 发布,翻译遵循 CC BY-SA 4.0 许可协议
切勿 在
FROM
子句中使用逗号。 始终 使用正确、明确的JOIN
语法。或者,正如我昨天看到的评论所暗示的那样。 . .JOIN
现代世界。如果您只想要一个这样的工人,那么使用
LIMIT
:大多数 假期似乎是
holiday
的最小值。如果它是最小值(如您的问题所建议),请使用ORDER BY c.Holidays ASC
。据推测,工作人员可能有多个合同,因此您可能需要聚合。但是,这还不清楚。
这 是一个 SQL 小提琴。