有3个表,每个表结构如下:
A表(代号1,值1)
B表(代号2,值2)
C表(代号3,值3)查询出A表中代号和B表中代号相同,且值不相同的那些数据;A表中代号和C表中代号相同,且值不相同的那些数据;B表中代号和C表中相同,且值不相同的那些数据最后得出的数据中代号要唯一,如果A表中代号和B表中代号相同,且值不相同的代号在C表中不存在,则值3填空;同理,值1,值2也如此。现要得出如下结果表结果:
代号 值1 值2 值3有人能理解并给出答案么 ?在线等,谢谢了
A表(代号1,值1)
B表(代号2,值2)
C表(代号3,值3)查询出A表中代号和B表中代号相同,且值不相同的那些数据;A表中代号和C表中代号相同,且值不相同的那些数据;B表中代号和C表中相同,且值不相同的那些数据最后得出的数据中代号要唯一,如果A表中代号和B表中代号相同,且值不相同的代号在C表中不存在,则值3填空;同理,值1,值2也如此。现要得出如下结果表结果:
代号 值1 值2 值3有人能理解并给出答案么 ?在线等,谢谢了
解决方案 »
- bv里面的image如何对鼠标左右键分别相应
- 济览CSDN里有些贴子时,会自动关闭所有与CSDN有关联的IE,这是咋回事啊!!!!!!
- 紧急求助:installshield能不能将activex控件打包成cab文件
- 我用vb编的一程序,前些天还是好的,现出现“内存溢出”错误,咋办
- 关于发送邮件
- Intelement 在 VB 非技术类论坛发表的散分帖子(5)
- 关于word表格的操作请高手指点
- installshield6.3可以用installshield6.22的语言包吗?
- vb关于DataGrid的问题
- 大家快来看看吧
- 如何让程序延时3秒钟
- 服务器用Serv-u设置的FTP客户端无法用Inet1.excute 的GET下载文件,原码如下,求解...
这么说吧,比如
a表 11 KK
12 pp
13 qqb表 12 zz
14 ddc表 14 ff
15 aa
11 kk最后要的结果是
代号 值1 值2 值3
11 kk kk
12 pp zz
13 qq
14 dd ff
15 aa
declare @a table
(
id int, dd varchar(10)
)
declare @b table
(
id int, dd varchar(10)
)
declare @c table
(
id int, dd varchar(10)
)insert into @a (id, dd) values(11,'KK')
insert into @a (id, dd) values(12,'pp')
insert into @a (id, dd) values(13,'qq')insert into @a (id, dd) values(12,'zz')
insert into @a (id, dd) values(14,'dd')insert into @a (id, dd) values(14,'ff')
insert into @a (id, dd) values(15,'aa')
insert into @a (id, dd) values(11,'kk')--开始处理数据
declare @d table
(
id int, dd1 varchar(10), dd2 varchar(10), dd3 varchar(10)
)select into @d (id)
select id from @a
union
select id from @b
union
select id from @cupdate @d
set dd1 = (select dd from @a where id = d.id),
dd2 = (select dd from @b where id = d.id),
dd3 = (select dd from @c where id = d.id)
from @d d--显示结果
select * from @d
而是SQL的问题,发到这里都不知道你是什么数据库
没法写啊,其实就是个全表连接,然后按照你的条件过滤一下即可
select d.id,a.v as va ,b.v as vb ,c.v as vc from
(
select id from a
union select id from b
union select id from c
) d left join a on d.id = a.id left join b on d.id = b.id left join c on d.id = c.id
id int, fld varchar(10)
)
GO
CREATE TABLE B(
id int, fld varchar(10)
)
GO
CREATE TABLE C(
id int, fld varchar(10)
)
GO
insert into A (id, fld) values(11,'KK')
insert into A (id, fld) values(12,'pp')
insert into A (id, fld) values(13,'qq')
GO
insert into B (id, fld) values(12,'zz')
insert into B (id, fld) values(14,'dd')
GO
insert into C (id, fld) values(14,'ff')
insert into C (id, fld) values(15,'aa')
insert into C (id, fld) values(11,'kk')GO
select D.id,A.fld,B.fld,C.fld
from
(select distinct id from (select id from A
union select id from B
union select id from C) t) d
left join A on D.id=A.id
left join B on D.id=B.id
left join C on D.id=C.id
GO
drop table A
drop table B
drop table C
GO如果你表ABC的fld字段同名,那么left join中的表名必为查询,比如A表:
不过这样做没有作用的
select id from A union select id from B union select id from C已经不包含重复数据了,咱用的不是 union alldistinct画蛇添足了,还让数据库去进行了一次无畏的排序
呵呵,说实话看你没有distinct才回的,原来是我错了....
select ISNULL(ISNULL(a.id,b.id),c.id), ISNULL(a.v,''),ISNULL(b.v,''),ISNULL(c.v,'')
from a full join b on a.id=b.id full join c on a.id=c.id
这个结果是:
11 KK kk
12 pp zz
13 qq
14 dd
15 aa
14 ff
12 pp zz
13 qq
14 dd
15 aa
14 ff
select d.id,a.v as va ,b.v as vb ,c.v as vc from
(
select id from a
union select id from b
union select id from c
) d left join a on d.id = a.id left join b on d.id = b.id left join c on d.id = c.id
这个答案是我需要的,非常感谢!