首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql leftjoin多表查询,出现重复的数据,怎么办

2012-06-14 
sql leftjoin多表查询,出现重复的数据,怎么处理?三个表A 表idtype112132B 表idclass11224455556666c表idna

sql leftjoin多表查询,出现重复的数据,怎么处理?
三个表
A 表
id type
11
21
32

B 表
id class
11
22
44
5555
6666

c表
id name
1dfs1111d
2kkk2Ok
3dd3OK
1111ddd


我先用A和B表,left join查询

select a.id ,a.[type] ,b.class from a left join b on a.id=b.id where a.id=1

得到的结果是
id type class
111

我现在想,在这条结果的基础上,关联C表,取出name字段,
我的做法是这样的:
select a.id ,a.[type] ,b.class ,c.[name] from a left join b on a.id=b.id left join c on a.id=c.id where a.id=1

但是结果却有2条结果:
id type class name
111dfs1111d
111111ddd

这不是我想要的结果。我想要的结果是
id type class name
111dfs1111d
这样的sql语句该怎么写呢?

谁帮我解决下啊?














[解决办法]
因为c表id=1的记录有两条,所以结果是两条是正确的,如果有重复的取第一条?
[解决办法]

SQL code
select a.id ,a.[type] ,b.class ,c.[name] from a left join b on a.id=b.id left join (select *,rn=row_number() over(partition by id order by getdate())) c on a.id=c.id and rn=1where a.id=1
[解决办法]
更改c表的重复ID编号使之唯一 ,查找重复的编码
select id,count(id) from c group by id
或者加个like 语句过滤下
select a.id ,a.[type] ,b.class ,c.[name] from a left join b on a.id=b.id left join c on a.id=c.id where a.id=1 and c.name like '%s%'
[解决办法]
SQL code
CREATE TABLE #A表       (ID INT,        TYPEA CHAR(10))INSERT #A表    SELECT '1','1' UNION ALL    SELECT '2','1' UNION ALL    SELECT '3','2'CREATE TABLE #B表       (ID INT,        CLASS CHAR(10))INSERT #B表    SELECT '1','1' UNION ALL    SELECT '2','2' UNION ALL    SELECT '4','4' UNION ALL    SELECT '55','55' UNION ALL    SELECT '66','66' CREATE TABLE #C表       (ID INT,        NAMEC CHAR(10))INSERT #C表    SELECT '1','dfs1111d' UNION ALL    SELECT '2','kkk2Ok' UNION ALL    SELECT '3','dd3OK' UNION ALL    SELECT '1','111ddd' DROP TABLE #b表SELECT TOP 1 A.ID,A.TYPEA,B.CLASS,C.NAMEC FROM #A表 A,#B表 B,#C表 CWHERE A.ID=B.ID AND B.ID=C.ID AND A.ID='1'/*C表中的ID值重复了,故有两条记录ID          TYPEA      CLASS      NAMEC----------- ---------- ---------- ----------1           1          1          dfs1111d  */ 

热点排行
Bad Request.