【问题标题】:How to get name from social security number (inside link)如何从社会安全号码中获取姓名(内部链接)
【发布时间】:2020-03-23 03:49:16
【问题描述】:

我遇到表名为 PERSON 的情况,并且有这些列:

  • SOCSECNUM(社会保险号)
  • 名字
  • 姓氏
  • 经理

有员工和经理。员工有经理,经理的“价值”显示为社保号。经理没有经理,因此他们的经理值为空。

有了这个我可以看到员工的名字和他们的经理社会安全号码(经理列不为空):

SELECT LASTNAME + ', ' + FIRSTNAME AS NAME_OF_EMPLOYEE,
MANAGER AS MANAGER_SOCIAL_SECURITY_NUMBER

FROM PERSON

WHERE MANAGER IS NOT NULL

我想获取经理的姓名 (SOCSECNUM)。所有人都有名字、姓氏和社会安全号码。我必须以某种方式链接它们,但我不知道如何。我希望你明白我的意思:)

【问题讨论】:

  • 帮助我们帮助您 - 请分享一些示例数据以及您尝试获得的结果
  • 如果该代码有效,则说明您没有使用 MySQL。标记您真正使用的数据库。
  • @Gordon Linoff 我刚开始研究这个。我不知道那是什么数据库。我们的老师已经为我们完成了它,它只在我们的学校网络或通过学校 VPN 工作,所以我不能在这里链接它。我还想知道您为什么使用();。也许这些会在我们以后出现:)

标签: mysql sql


【解决方案1】:

存储未加密的社会安全号码来代表员工几乎违反了我所知道的所有隐私规则。即使在可能不受保护的国家/地区,我也强烈建议对这些表使用人工密钥。

也就是说,你似乎只是想要一个join

SELECT (p.LASTNAME + ', ' + p.FIRSTNAME) AS NAME_OF_EMPLOYEE,
       (pm.LASTNAME + ', ' + pm.FIRSTNAME) AS NAME_OF_MANAGER
FROM PERSON p JOIN
     PERSON pm
     ON pm.SOCSECNUM = p.MANAGER;

【讨论】:

  • 谢谢!我可以一起做交叉链接和几个表,但内部链接对我来说是个小问题,但现在不是了:)
  • 我错过了这个案子的一件重要事情。这些经理也是公司的雇员,他们必须在员工名单上。在我的第一条消息中,如果我删除 WHERE MANAGER IS NOT NULL,代码将返回所有员工。所以,然后我有 12 行,所有员工包括三个经理。我尝试了不同的联接,但始终只有 9 名员工(没有经理姓名)或超过 12 名(不知何故成倍增加)。
  • @masteroscar 。 . . JOIN 过滤掉 MANAGERNULL 的行。如果您将JOIN 替换为LEFT JOIN,您应该得到表中的原始行——除非您有重复项(即两行具有相同的SOCSECNUM)。
  • 感谢 Gordon,它现在可以正常工作了!我必须阅读更多关于 LEFT JOIN 它是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 2014-05-04
  • 2013-05-04
  • 1970-01-01
  • 2014-08-07
相关资源
最近更新 更多