SQL - 如何在select中隐藏列

时间:2017-05-06 11:15:47

标签: mysql sql

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

SCHEMA

合同:

Contract_ID (PK)
Worker_ID (FK)
holidays

工人

Worker_ID (PK)
Name

样本数据:

合同 Contract

工人 Worker

CODE

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

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

2 个答案:

答案 0 :(得分:4)

从不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小提琴。

答案 1 :(得分:4)

只需尝试:

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

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