SQL - 如何在选择中隐藏列

新手上路,请多包涵

我有两个表“合同”和“工人”。我需要找到剩下的假期最多的工人。但是,我只需要打印他的名字,而不是假期。

架构


合同:

 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 许可协议

阅读 756
2 个回答

切勿FROM 子句中使用逗号。 始终 使用正确、明确的 JOIN 语法。或者,正如我昨天看到的评论所暗示的那样。 . . JOIN 现代世界。

如果您只想要一个这样的工人,那么使用 LIMIT

 SELECT w.Name
FROM worker w JOIN
     contract c
     ON w.Worker_ID = c.Worker_ID
ORDER BY c.Holidays DESC
LIMIT 1;

大多数 假期似乎是 holiday 的最小值。如果它是最小值(如您的问题所建议),请使用 ORDER BY c.Holidays ASC

据推测,工作人员可能有多个合同,因此您可能需要聚合。但是,这还不清楚。

是一个 SQL 小提琴。

原文由 Gordon Linoff 发布,翻译遵循 CC BY-SA 3.0 许可协议

只需尝试:

 SELECT w.Name
FROM worker w JOIN
     contract c
     ON w.Worker_ID = c.Worker_ID
ORDER BY c.Holidays DESC

如果您只需要一个结果,您可以添加 LIMIT 1

原文由 Sanchit Gupta 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题