SQL - 如何在选择中隐藏列

Bla*_*ack 0 mysql sql

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

架构


合同:

Contract_ID (PK)
Worker_ID (FK)
holidays
Run Code Online (Sandbox Code Playgroud)

工人

Worker_ID (PK)
Name
Run Code Online (Sandbox Code Playgroud)

样本数据:


合同 合同

工人 工人

代码


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

编辑:以下 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
Run Code Online (Sandbox Code Playgroud)

结果:

Name    Holidays
Fegelein    31
Run Code Online (Sandbox Code Playgroud)

预期结果:

Name
Fegelein
Run Code Online (Sandbox Code Playgroud)

SQL小提琴http : //sqlfiddle.com/#!9/a840b /17

所以我需要隐藏第二个 select MAX(C.Holidays) As Holidays。这可能吗?

Gor*_*off 7

切勿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;
Run Code Online (Sandbox Code Playgroud)

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

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

是一个 SQL 小提琴。