为什么我没有得到明显的结果?

时间:2013-01-29 15:05:08

标签: sql sql-server join distinct

下面是我编写的SQL代码,但已经意识到事情是重复的,这是不可接受的。我对SQL不是很熟悉,并且一直有这方面的问题,非常感谢任何帮助。我也编辑了这个,所以我知道这里有额外的表,但这会降低性能吗?

select distinct
ru.registername AS [1]
,lc.lifecyclename AS [2]
,s.statename AS [3]
,t.timername AS [4]
,t.lastexecuted AS [5]
from hsi.wfsrvrxlcstate wxs with (nolock)
join hsi.registeredusers ru with (nolock) on wxs.registernum = ru.registernum
join hsi.lcstate s with (nolock) on wxs.statenum = s.statenum
join hsi.lcxstate lxs with (nolock) on s.statenum = lxs.statenum
join hsi.lifecycle lc with (nolock) on lxs.lcnum = lc.lcnum
join hsi.lcstatextimer sxt on s.statenum = sxt.statenum
join hsi.lctimer t on sxt.timernum = t.timernum
join hsi.tasklist tl with (nolock) on t.actionnum = tl.tasklistnum
join hsi.tasklistxtask tlxa with (nolock) on tl.tasklistnum = tlxa.tasklistnum
join hsi.action a with (nolock) on tlxa.tasknum = a.actionnum
order by  registername, lastexecuted desc, lifecyclename

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果没有看到所有表格的数据,就无法回答你的问题:'(

...但是话说回来,如果我因为拒绝屈服于DISTINCT语句的复杂联接而陷入困境,我通常会采用以下技巧。

选择语句中显示所有表格的相关字段。在你的情况下:

select distinct wxs.*, ru.*, s.*.....etc
from ... as per your original query
join ... as per your original query

执行查询并监视所有table_name.id列。重复的行加上orignating表将很容易被发现,因为它的主键将显示两次。您可能需要通过所有PK来订购,以便更容易发现。

这将为您提供找到缺少的FK联接所需的线索。

祝你好运!