SQL - 左连接的重复行

时间:2018-02-12 22:52:36

标签: sql sql-server sql-server-2008 ssms

我正在努力延长病假和员工信息的天数。

我有两张桌子

一个是记录病假(LVE)的表,另一个是员工表,其中包含员工数据(员工),例如就业状况栏(pos_statusa)

通过下面的查询,我得到了重复的结果 - 相同的职业数,休假类型,离开开始,离开结束和职位状态。

我在这里做错了什么?

SELECT RTRIM(DET_NUMBER) AS DET_NUMBERA,
    RTRIM(LVE_TYPE_CD) AS LVE_TYPE_CD,
    l.LVE_START,
    l.LVE_END, 
    l.LVE_HOUR_TKN,
    l.LVE_DAY_TAKE, 
    e.pos_statusa
FROM            dbo.LVE as l
LEFT JOIN Staff as e
ON l.DET_NUMBER = e.DET_NUMBERA COLLATE SQL_Latin1_General_CP1_CI_AS
WHERE (LVE_START > = '2017-02-01'   
AND LVE_END < '2018-02-01')
AND LVE_TYPE_CD IN ('SIC','USIC')

干杯

3 个答案:

答案 0 :(得分:0)

您是否尝试添加&#39; Distinct&#39; SELECT之后?

答案 1 :(得分:0)

如果您只需要在LVE表和员工表中都有数据的记录,那么在满足您的条件后,请使用JOIN而不是JOIN。

SELECT RTRIM(DET_NUMBER) AS DET_NUMBERA,
    RTRIM(LVE_TYPE_CD) AS LVE_TYPE_CD,
    l.LVE_START,
    l.LVE_END, 
    l.LVE_HOUR_TKN,
    l.LVE_DAY_TAKE, 
    e.pos_statusa
FROM            dbo.LVE as l
JOIN Staff as e
ON l.DET_NUMBER = e.DET_NUMBERA COLLATE SQL_Latin1_General_CP1_CI_AS
WHERE (LVE_START > = '2017-02-01'   
AND LVE_END < '2018-02-01')
AND LVE_TYPE_CD IN ('SIC','USIC')

答案 2 :(得分:0)

感谢您的帮助。

它看起来像一个简单的&#39; DISTINCT&#39;已经成功了!