我是使用内连接还是左连接?

时间:2018-05-22 15:36:09

标签: sql sql-server join

我有两个单独的表,我们将associate_id作为主键从中提取数据。我试图查找Associate_ID在过去4个月和去年的几笔交易中所做的所有销售(在sales.dim中找到sales_charge)。我很难用时间戳和连接。

这是我到目前为止所拥有的:

SELECT associate_id
, sales.dim.sales_charge
FROM dbo.associate
LEFT JOIN dbo.sales ahd
ON associate_id = ahd.associate_id
AND ahd.end_dt > GETDATE()

我是SQL和编码的新手,请告诉我我错过的内容。

由于

2 个答案:

答案 0 :(得分:1)

如果您想要包括所有员工,即使是那些没有销售人员的员工,请使用left join

SELECT a.associate_id, ahd.dim.sales_charge
FROM dbo.associate a LEFT JOIN
     dbo.sales ahd
    ON a.associate_id = ahd.associate_id AND
       ahd.end_dt > DATEADD(month, -4, GETDATE());

答案 1 :(得分:0)

回答“我是否使用内连接或左连接?”这一问题。如果要仅包含两个表中的匹配记录,则使用内部联接,而左(外部)联接将包括左侧表中的所有记录。

在您尝试的查询中,如果您希望结果集中包含所有员工,即使他们在过去4个月内没有任何销售,请使用LEFT JOIN。如果您只想拥有一个或多个销售的员工,请使用INNER JOIN。

另一个问题是条件“ahd.end_dt> GETDATE()”。这意味着当前时间之后的所有结束日期。将其更改为“ahd.end_dt> DATEADD(月,-4,GETDATE())”