日期:2014-05-17  浏览次数:20791 次

求大神帮忙,去除SQL语句查询结果中的重复字段?
描述一下遇到的问题:当Articles这个表中有一个外键字段的时候,不会出现结果重复字段的情况,当有两个外键字段的时候,就会出现每个字段重复两次,当有三个外键字段的时候,就会出现每个字段重复三次....

在代码中,添加了DISTINCT,但是还是有重复字段,不知道是怎么回事?求大神们帮忙看一下:
代码:
SQL code
SELECT DISTINCT
    字段序号=a.colorder ,
    字段名=a.name ,
     外键字段所在的表=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
                THEN object_name(tony.rkeyid) ELSE ''
           END ,
     外键字段=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
                 THEN (SELECT name FROM syscolumns
                       WHERE colid=tony.fkey AND id=tony.fkeyid)      
                 ELSE ''
             END,
     类型=b.name 
FROM sys.syscolumns a
    LEFT JOIN systypes b ON a.xtype = b.xusertype 
    INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.status >= 0
    LEFT JOIN sysobjects htl ON htl.parent_obj=d.id AND htl.xtype='F'
    LEFT JOIN sysforeignkeys tony on htl.id=tony.constid
WHERE d.name='Articles'  --这里输入包含表名称的条件






------解决方案--------------------
LZ感觉是做表的自定义字段吧,以表来查询不会有重启的字段了?再加个表名两个字段组合主键就可以了
这样感觉表有点...
------解决方案--------------------
SQL code
SELECT 
    字段序号=a.column_id ,
    字段名=a.name ,
    外键字段所在的表=OBJECT_NAME(referenced_object_id),
    外键字段=SC.name,
    SC.name,
     类型=b.name 
FROM sys.columns a
    LEFT JOIN systypes b ON a.user_type_id = b.xusertype 
    LEFT JOIN sys.foreign_key_columns FK  ON  FK.parent_object_id = a.object_id  AND FK.parent_column_id = a.column_id 
    LEFT JOIN sys.columns SC  ON FK.referenced_object_id = SC.object_id   AND FK.referenced_column_id = SC.column_id  
WHERE a.object_id=OBJECT_ID('tb')  --这里输入包含表名称的条件

------解决方案--------------------
如果你是05 或刚高版本就不要在使用
 syscolumns systypes sysobjects 了

请用
sys.columns sys.types sys.objects
------解决方案--------------------
select 字段序号,字段名,max(外键字段所在的表) as 外键字段所在的表,max(外键字段) as 外键字段,类型
from (SELECT distinct
字段序号=a.colorder ,
字段名=a.name ,
外键字段所在的表=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
THEN object_name(tony.rkeyid) ELSE ''
END ,
外键字段=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
THEN (SELECT name FROM syscolumns
WHERE colid=tony.fkey AND id=tony.fkeyid)
ELSE ''
END,
类型=b.name 

FROM sys.syscolumns a
LEFT JOIN systypes b ON a.xtype = b.xusertype 
INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.status >= 0
LEFT JOIN sysobjects htl ON htl.parent_obj=d.id AND htl.xtype='F'
LEFT JOIN sysforeignkeys tony on htl.id=tony.constid
WHERE d.name='TB_Details' ) as TB
group by 字段序号,字段名,类型

字段不存在 ,不能啊 。测试通过的