mysql SQL -如何在select中隐藏列

sg3maiej  于 2023-02-28  发布在  Mysql
关注(0)|答案(4)|浏览(241)

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

方案

合同号:

Contract_ID (PK)
Worker_ID (FK)
holidays

工人

Worker_ID (PK)
Name

样品数据:

合同x1c 0d1x
工人

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

EDIT:下面的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。这可能吗?

isr3a4wc

isr3a4wc1#

  • 永远不要 * 在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 Fiddle。

fzsnzjdm

fzsnzjdm2#

只需尝试:

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

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

nr7wwzry

nr7wwzry3#

我觉得这应该能帮你。

SELECT W.Name
FROM worker AS W, contract AS C
where W.Worker_ID = C.Worker_ID order by C.Holidays limit 1;

从选择属性中删除Holidays并将其限制为1,然后orderby Holidays执行此操作

kmbjn2e3

kmbjn2e34#

选择姓名(选择w.,c. 从工人w加入合同c,w.工人_id=c.工人_id)其中假期=(选择合同中的最大(假期));
看看这个最简单的方法。

相关问题