使用 DISTINCT 消除重复项
DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,那么将返回所有行,包括重复的行。例如,如果在 titleauthor 中选择所有作者 ID 时未使用 DISTINCT,那么将会返回下列行(其中包括一些重复的行):USE pubs
SELECT au_id
FROM titleauthor下面是结果集:au_id
-----------
172-32-1176
213-46-8915
213-46-8915
238-95-7766
267-41-2394
267-41-2394
274-80-9391
409-56-7008
427-17-2319
472-27-2349
486-29-1786
486-29-1786
648-92-1872
672-71-3249
712-45-1867
722-51-5454
724-80-9391
724-80-9391
756-30-7391
807-91-6654
846-92-7186
899-46-2035
899-46-2035
998-72-3567
998-72-3567 (25 row(s) affected)而使用了 DISTINCT 后,就能够除去重复项,而只查看唯一的作者 ID:USE pubs
SELECT DISTINCT au_id
FROM titleauthor下面是结果集:au_id
-----------
172-32-1176
213-46-8915
238-95-7766
267-41-2394
274-80-9391
409-56-7008
427-17-2319
472-27-2349
486-29-1786
648-92-1872
672-71-3249
712-45-1867
722-51-5454
724-80-9391
756-30-7391
807-91-6654
846-92-7186
899-46-2035
998-72-3567 (19 row(s) affected)这是SQL的说明,但是只要表中如果存在Text、ntext、image类型字段时,需要进行查询时,就会出现“不能以DISTINCT方式选择Text、ntext、image数据类型”
不知道怎么去解决这个问题?
DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,那么将返回所有行,包括重复的行。例如,如果在 titleauthor 中选择所有作者 ID 时未使用 DISTINCT,那么将会返回下列行(其中包括一些重复的行):USE pubs
SELECT au_id
FROM titleauthor下面是结果集:au_id
-----------
172-32-1176
213-46-8915
213-46-8915
238-95-7766
267-41-2394
267-41-2394
274-80-9391
409-56-7008
427-17-2319
472-27-2349
486-29-1786
486-29-1786
648-92-1872
672-71-3249
712-45-1867
722-51-5454
724-80-9391
724-80-9391
756-30-7391
807-91-6654
846-92-7186
899-46-2035
899-46-2035
998-72-3567
998-72-3567 (25 row(s) affected)而使用了 DISTINCT 后,就能够除去重复项,而只查看唯一的作者 ID:USE pubs
SELECT DISTINCT au_id
FROM titleauthor下面是结果集:au_id
-----------
172-32-1176
213-46-8915
238-95-7766
267-41-2394
274-80-9391
409-56-7008
427-17-2319
472-27-2349
486-29-1786
648-92-1872
672-71-3249
712-45-1867
722-51-5454
724-80-9391
756-30-7391
807-91-6654
846-92-7186
899-46-2035
998-72-3567 (19 row(s) affected)这是SQL的说明,但是只要表中如果存在Text、ntext、image类型字段时,需要进行查询时,就会出现“不能以DISTINCT方式选择Text、ntext、image数据类型”
不知道怎么去解决这个问题?
DISTINCT 是对一条记录来判的
SELECT DISTINCT au_id
FROM titleauthor
肯定是没问题的,对可变字段,如Text、ntext、image,是不可判的(SQL要考虑效率),那你可以在查询中不用这些字段名.
如一个表为:
id integer,au_id varchar(10),pic image
你可用SELECT DISTINCT au_id FROM titleauthor来得到不重复的au_id
要得到你重复的pic一般是没实际意义的,如果真的需要,你可加一字段,pic_id(用integer或varchar类型,为pic的一个标识符),来与image一一对应.这样可以用
SELECT DISTINCT pic_id FROM titleauthor
来判pic字段是否唯一,你也可用
SELECT DISTINCT au_id,pic_id FROM titleauthor来得到两者都不重复的记录
SQL可以这样写:
SELECT DISTINCT a.au_id,b.pic_id FROM titleauthor a,titleauthor_add b where a.id=b.id
在不修改表结构的情况下,要对表新增字段,我一般都用此方法(只是效率低了些)
Create table TEST (ID Int ,Name Varchar(10),Re Text)
GO
--插入数据
Insert TEST Values(1,'AA','asadsad')
Insert TEST Values(1,'AA','asadsad')
Insert TEST Values(1,'BB','DSDSS')
Insert TEST Values(1,'CC','SFF')
GO
--测试
Select * from TEST
Select Distinct ID,Name,Convert(Varchar(8000),Re) As Re Into #T from TEST
Delete from TEST
Insert TEST Select * from #T
Select * from TEST
--删除测试环境
Drop table TEST,#T
GO
--结果
/*
--删除前
IDNameRe
1AAasadsad
1AAasadsad
1BBDSDSS
1CCSFF--删除后
IDNameRe
1AAasadsad
1BBDSDSS
1CCSFF
*/
执行倒是可以,但是如果ID有N条记录时,查询应该只有一条吧,我在SQL查询器上,进行试验,加不加关键字Distinct 是一样的,不问ID是不是重复,我可以肯定地告诉你这样低级的错误我是不会犯的
好心帮助你,做人都不会