DISTINCT的意思是 省略选择字段中包含重复数据的记录。为了让查询结果包含它们,必须使 SELECT 语句中列举的每个字段值是唯一的。例如,雇员表可能有一些同姓的雇员。如果有两个记录的姓氏字段皆包含 Smith,则下列 SQL 语句只返回包含 Smith 的记录:

SELECT DISTINCT
LastName
FROM Employees;

如果省略 DISTINCT,则查询将返回两个包含 Smith 的记录。

如果 SELECT 子句包含多个字段,则对已给记录,所有字段值的组合必须是唯一的,而且结果中将包含这一组合。

如果查询使用 DISTINCT,则不能更新其输出,而且该输出也不会反映其它用户所作的一系列更改。

但是……

SELECT DISTINCT
LastName,CatalogID
FROM Employees inner join Catalogs;

查出来的结果可能是
Name                   CatalogID
olive                        2
olive                        3
smith                       5
smith                       6

我在项目中使用到的SQL也遇到过类似问题

SELECT    TOP  5 
    TaokeCourses.CourseID,
        TrainerID,
      CompanyID,
        TaokeCourses.Name ,
      TargetCustomers ,
      Target ,
      CostTime ,
      PublishType ,
      ContactName ,
      ContactEmail ,
      ContactPhone ,
      ContactAddress ,
      ContactZipCode ,
      CreateTime ,
      UpdateTime ,
      TaokeCourses.Deleted,
        TaokeCatalogs.CatalogID,
        TaokeCatalogs.ParentID,
        TaokeCourses.TrainerID   
FROM
    TaokeCourses



INNER JOIN 
(TaokeCatalogsTaokeCourses 
INNER  JOIN TaokeCatalogs ON TaokeCatalogsTaokeCourses.CatalogID=TaokeCatalogs.CatalogID)
 
On TaokeCourses.CourseID = TaokeCatalogsTaokeCourses.CourseID
INNER JOIN TaokeAreasTaokeCourses On TaokeCourses.CourseID = TaokeAreasTaokeCourses.CourseID
INNER JOIN TaokeCourseTypesTaokeCourses On TaokeCourses.CourseID = TaokeCourseTypesTaokeCourses.CourseID


 
WHERE
       
-- TaokeCatalogs.ParentID=@ParentID AND
        TaokeCourses.Deleted=0
    
ORDER BY
    CreateTime
DESC

查出来的结果中有重复的CourseID,但每一条记录都不完全相同,使用DISTINCT也就不起作用了;
我希望查找的到唯一的CourseID,希望各位给些少帮助!

posted on 2006-02-28 18:09  茶马古道  阅读(590)  评论(0编辑  收藏  举报