2011-06-24 33 views
0

我对我的要求检索从三个表中的数据,所以我写了下面的查询我如何消除gridview中的重复?

我是越来越正确的结果,但问题是记录重复什么在

该查询的问题。我将查询的结果绑定到网格视图控件。请帮我

SELECT DISTINCT (tc.coursename), ur.username, uc. DATE, 'Paid' AS Status 
    FROM tblcourse tc, tblusereg ur, dbo.UserCourse uc 
WHERE tc.courseid IN (SELECT ur1.courseid 
         FROM dbo.UserCourse ur1 
         WHERE ur1.userid = @userid) 
    AND ur.userid = @userid 
    AND uc. DATE IS NOT NULL 
    AND ur.course - id = uc.course - id 
+0

*记录重复*请张贴其中的一些记录。我很难相信任何DBMS的DISTINCT功能开始失败。 –

回答

0

更改您的查询的第一部分

select distinct (tc.coursename), 

TO

select distinct tc.coursename, 

,使所有列distinct不仅仅是tc.coursename

+0

我改变了它,但我仍然得到同样的问题。 – user760379

+0

恕我直言你的数据在引擎盖下并不明显,你得到的结果并不是什么完全保存在数据库中,就像保存日期的精确度和结果中得到的一样。 –

3

有没有之间的连接tblcourse tc,tblusereg ur。因此,尽管IN(实际上是JOIN),您仍然可以进行交叉连接。

DISTINCT也适用于整行:不是一列。

注意:您提到dbo.UserCourse两次,但使用不同的列名courseid和[courseid]

与JOIN的改写。

select distinct 
    tc.coursename, ur.username, uc.[date], 'Paid' as [Status] 
from 
    dbo.tblcourse tc 
    JOIN 
    dbo.tblusereg ur ON tc.courseid = ur.[course-id] 
    JOIN 
    dbo.UserCourse uc ON ur.[course-id] = uc.[course-id] 
where 
    [email protected] 
    and 
    uc.[date] is not null 

可能解决您的问题...

+0

@gbn - 我仍然看不到原始查询如何导致重复记录?你能解释一下吗?(读作:愚蠢到足以达到我的水平)*? –

+0

@Lieven:可能是由于tc和uc之间的CROSS JOIN导致每个'tc.coursename'有许多'uc.date'值。 ur1 subquery在理论上会有一些限制,但这会被交叉连接混淆。或者,如果'course'是一个数字,'id'是明确的:'course-id'是一个减法,当它应该是'[course-id]'作为列名。或其他(数据质量差等)。我只是猜测... – gbn

+0

@gbn:OP可以'CROSS JOIN'他的心,但是如果他对最终结果做了DISTINCT,我仍然不知道他如何获得重复记录。如果那些*重复*记录,我真的很希望看到OP发布两篇文章。 –