【问题标题】:Assistance with joining two tables - not sure which joins to use协助连接两个表 - 不确定使用哪个连接
【发布时间】:2020-06-24 04:51:24
【问题描述】:

我目前正在尝试根据我们的企业 HR 列表增加应用程序导出,以识别应用程序中已终止的任何当前员工(将来自 HR)。

表 1 - 应用程序列表。包含 Emp_name 和 Emp_ID

表 2 - 人力资源列表。包含 Emp_name、Emp_ID、Termination_Date(重要)。

您知道我需要什么代码来在表 1 中添加一个列,其中包含每个员工各自的终止日期吗?如果为 NULL,他们仍然被使用,如果有一个日期,这是我们的观察。

【问题讨论】:

    标签: sql sql-server join


    【解决方案1】:

    应该就是这么简单,除非还有其他条件你没有讨论过。

    SELECT table1.*, table2.Termation_Date  --list out columns instead of * 
    FROM table1 
    INNER JOIN table2 
    ON table1.Emp_ID = table2_EmpID
    WHERE table2.termination_Date IS NOT NULL
    

    【讨论】:

    • 对于第一行,用什么来代替 table1 的 *?我试过运行它,我得到“无法绑定多部分标识符”,我认为这是因为我将脚本运行为 SELECT table1, table2.term_dt FROM table1 INNER JOIN table2 ON table1.Emp_ID = table2_EmpID WHERE table2.termination_Date IS NOT NULL
    • * 只是指 table1 中的所有列。我同意罗伯特的查询,假设 table2 包含所有员工,但如果 table2 不包含 table1 中的所有员工,我会将 INNER JOIN 更改为 LEFT JOIN 以返回所有 table1 记录与匹配的 table2 记录。 INNER 只会返回 empid 在两个表中的位置。
    • 知道了。表 1 有 15,000 行,表 2 有 100k+。该拉取的结果表是 236 行。这是否意味着表 1 中有 236 名员工在表 2 中填写了终止_dt?
    • 是的。 @riekertv 是对的,INNER JOIN 假设 table1 是一个完整的列表。
    • 是的,假设table2中每个人只有一个empid记录。如果 table2 中有多个 empid 记录,则必须扩展查询,例如如果人们是根据合同任命的,并且每个任命都有自己的 table2 记录和终止日期,那么上面的查询可能不会显示最新记录,只显示每个记录与终止日期匹配的 empid。
    猜你喜欢
    • 2014-07-12
    • 2016-05-18
    • 2012-08-25
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多