为什么查询结果重复? SQL Server

时间:2017-04-29 09:01:02

标签: sql-server tsql duplicates

我正在尝试编写查询。我想只返回一行,但我的查询返回多个重复的行。

我的查询在

之下
SELECT
    LOWER(M.UserID) AS EmpID,
    ISNULL(M.DispName, '') AS UserName,
    ISNULL(C.CompCode, '') AS CompCode,
    ISNULL(D.DispName, '') AS DeptName,
    ISNULL(D.DispName, '') AS DispName,
    ISNULL(R.RankCode, '') AS RankCode,
    M.SortOrder AS UserOrder,
    R.SortOrder AS RankOrder,
    ISNULL(J.JobCode, '') AS JobCode
FROM 
    tb_User M WITH(NOLOCK)
INNER JOIN 
    tb_Dept D WITH(NOLOCK) ON M.MainDeptCode = D.DeptCode
INNER JOIN 
    tb_Company C WITH(NOLOCK) ON M.CompCode = C.CompCode
INNER JOIN 
    tb_Rank R WITH(NOLOCK) ON M.RankCode = R.RankCode
INNER JOIN 
    tb_Duty DT WITH (NOLOCK) ON M.DutyCode = DT.DutyCode
LEFT OUTER JOIN 
    tb_Job J WITH (NOLOCK) ON M.JobCode = J.JobCode 
WHERE 
    MainDeptCode = '1000' AND M.DisplayYN = 'Y'
ORDER BY
    RankOrder, JobCode, DispName

这就是结果:

EmpID UserName CompCode DeptName DispName RankCode UserOrder RankOrder JobCode 
0001  ryden    1000     ceo       ceo      1         0          0
0001  ryden    1000     ceo       ceo      1         0          0
0001  ryden    1000     ceo       ceo      1         0          0
0001  ryden    1000     ceo       ceo      1         0          0
0001  ryden    1000     ceo       ceo      1         0          0
0001  ryden    1000     ceo       ceo      1         0          0
0001  ryden    1000     ceo       ceo      1         0          0
0001  ryden    1000     ceo       ceo      1         0          0

如何修复该查询?请帮帮我。

2 个答案:

答案 0 :(得分:2)

“快速而肮脏”的方式是将DISTINCT添加到SELECT查询 -

SELECT DISTINCT * FROM....

但这实际上并没有解决问题。

正确的方法是找出原因。如果不知道这些表中的数据,就无法分辨。最常见的原因是您加入的其中一个表具有多个与连接条件匹配的行,但它们在SELECT中未包含的列中有所不同(因此它们似乎不是任何一个不同)。

要完成此操作,请注释掉所有连接(及其在SELECT中的关联列)并逐个添加它们,以查看哪个表正在添加多行。然后,您可以选择该表中的所有列,以根据您选择加入的条件确切地查看匹配的行以及原因。

确定行后,您需要制定一组新的JOINWHERE子句,以排除您不想要的所有其他行。

在大多数情况下,这应该可以帮到你,但是你可能需要做一些更复杂的模式(子查询,公用表表达式等)。

答案 1 :(得分:1)

如果输出中有多行,则问题是您的某个表有多行,或者您没有正确加入它。我会打电话给select *看看这是哪张桌子。在您的情况下,我认为它是表tb_Duty,因为您没有使用它。