Mysql SQL-如何在选择中隐藏列
我有两张表“合同”和“工人”。我需要找到假期最多的工人。然而,我只需要打印他的名字,而不是假期Mysql SQL-如何在选择中隐藏列,mysql,sql,Mysql,Sql,我有两张表“合同”和“工人”。我需要找到假期最多的工人。然而,我只需要打印他的名字,而不是假期 SELECT W.Name, MAX(C.Holidays) As Holidays FROM worker AS W, contract AS C WHERE W.Worker_ID = C.Worker_ID 模式 合同: Contract_ID (PK) Worker_ID (FK) holidays Name Holidays Fegelein 31 Name Fegel
SELECT W.Name, MAX(C.Holidays) As Holidays
FROM worker AS W, contract AS C
WHERE W.Worker_ID = C.Worker_ID
模式
合同:
Contract_ID (PK)
Worker_ID (FK)
holidays
Name Holidays
Fegelein 31
Name
Fegelein
工人
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
结果:
Contract_ID (PK)
Worker_ID (FK)
holidays
Name Holidays
Fegelein 31
Name
Fegelein
所需结果:
Contract_ID (PK)
Worker_ID (FK)
holidays
Name Holidays
Fegelein 31
Name
Fegelein
SQL小提琴:
因此,我需要将第二个selectMAX(C.Holidays)隐藏为Holidays
。这可能吗?切勿在FROM
子句中使用逗号。始终使用正确、明确的JOIN
语法。或者,正如我昨天看到的一条评论所暗示的<代码>加入现代世界
如果您只需要一个这样的工人,请使用限制
:
SELECT w.Name
FROM worker w JOIN
contract c
ON w.Worker_ID = c.Worker_ID
ORDER BY c.Holidays DESC
LIMIT 1;
大多数假日似乎是假日
的最小值。如果它是最小值(如您的问题所建议的),请使用c.Holidays ASC的订单
据推测,工人可能有多个合同,因此您可能需要聚合。然而,这还不清楚
是个SQL高手。我认为这应该是你的工作
SELECT W.Name
FROM worker AS W, contract AS C
where W.Worker_ID = C.Worker_ID order by C.Holidays limit 1;
从“选择属性”中删除假日并将其限制为1,orderby Holidays只需尝试以下功能即可完成此任务:
SELECT w.Name
FROM worker w JOIN
contract c
ON w.Worker_ID = c.Worker_ID
ORDER BY c.Holidays DESC
如果您只需要一个结果,您可以添加限制1
。编辑您的问题,并提供示例数据和所需结果。@GordonLinoff也许您应该重新阅读该问题,您要求的所有内容都已包含在内。结果:您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第5行“从worker w中选择w.Name加入合同c ON w.worker\u ID=c.worker\u”附近使用的正确语法。
@Black然后您错误地复制了Gordon的查询,或者您向我们显示的架构不准确。@Black。该代码在SQL FIDLE上运行良好。我已经添加了链接。很有效!我的错是,我以前有一些其他SQL语句,但忘记用关闭一个SQL语句
但逻辑似乎有问题,因为即使Kling
是假期最多的一个,也会出现Fegelein
。但是问题解决了,这就是马瑟斯所说的。如果我添加DESC
,那么Klink
看起来很简单,我喜欢它!很乐意帮忙。:)