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

施玛



合同:

Contract_ID (PK)
Worker_ID (FK)
holidays


工人

Worker_ID (PK)
Name


样本数据:



合同
mysql - SQL-如何在选择中隐藏列-LMLPHP

工人
mysql - SQL-如何在选择中隐藏列-LMLPHP





目前,我使用以下代码打印信息:

编辑:以下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。这可能吗?

最佳答案

切勿在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

据推测,工作人员可能签有多个合同,所以您可能需要汇总。但是,还不清楚。

Here是一个SQL Fiddle。

关于mysql - SQL-如何在选择中隐藏列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43819781/

10-13 00:41