帮忙写这个SQL语句,在线等。。。。。。

jackwater 2009-12-01 09:23:17
现在我有三个表
TableA: TableB: TableC
PK_Col Col1 Col2 Col3 PK_Col Col1 Col2 Col3 PK_Col Col1 Col2 Col3
101 a1 a2 a3 101 e1 e2 e3 101 x1 x2 x3
102 b1 b2 b3 103 g1 g2 g3 102 y1 y2 y3
103 c1 c2 c3

这三个表中的主键代表一个意思,但是也许表A中有的主键表B没有,表B有的表C没有。现在想写条语句把
表A、B、C三个表中记录找出来,如:
PK_Col Col1 Col2 Col3 Col1 Col2 Col3 Col1 Col2 Col3
101 a1 a2 a3 e1 e2 e3 x1 x2 x3
102 b1 b2 b3 g1 g2 g3 y1 y2 y3
103 c1 c2 c3

要保证数据不能重复,或者有串位置的情况。
...全文
188 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt1314917 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jackwater 的回复:]
忘了补一句,我现在使用Oracle,可能这个语句还不能一下执行出来。
而且我现在如果再加主键和表的话也可以吗?
[/Quote]

...oracle,
这个是sql server板块。。。
jackwater 2009-12-01
  • 打赏
  • 举报
回复
忘了补一句,我现在使用Oracle,可能这个语句还不能一下执行出来。
而且我现在如果再加主键和表的话也可以吗?
pt1314917 2009-12-01
  • 打赏
  • 举报
回复
语句试过了。是可以的。。。已经考虑这种情况了。
不知道楼主那里可不可以?
pt1314917 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jackwater 的回复:]
现在我的实际情况可能是这三个表都有可能为空,或者有可能有不定个表为空的情况,我想做一个查询统计。统计出当前所有存在的主键的数据,就想我最后那个写的那样。
[/Quote]

--> 测试数据: [TableA]
if object_id('[TableA]') is not null drop table [TableA]
create table [TableA] (PK_Col int,Col1 varchar(2),Col2 varchar(2),Col3 varchar(2))


--> 测试数据: [TableB]
if object_id('[TableB]') is not null drop table [TableB]
create table [TableB] (PK_Col int,Col1 varchar(2),Col2 varchar(2),Col3 varchar(2))

--> 测试数据: [TableC]
if object_id('[TableC]') is not null drop table [TableC]
create table [TableC] (PK_Col int,Col1 varchar(2),Col2 varchar(2),Col3 varchar(2))
insert into [TableC]
select 101,'x1','x2','x3' union all
select 102,'y1','y2','y3'

select pk_col=coalesce(a.pk_col,b.pk_col,c.pk_col),a.col1,a.col2,a.col3,b.col1,b.col2,b.col3,c.col1,c.col2,c.col3 from
tablea a full join tableb b on a.pk_col=b.pk_col
full join TableC c on isnull(a.pk_col,b.pk_col)=c.pk_col

--结果:

pk_col col1 col2 col3 col1 col2 col3 col1 col2 col3
----------- ---- ---- ---- ---- ---- ---- ---- ---- ----
101 NULL NULL NULL NULL NULL NULL x1 x2 x3
102 NULL NULL NULL NULL NULL NULL y1 y2 y3
jackwater 2009-12-01
  • 打赏
  • 举报
回复
现在我的实际情况可能是这三个表都有可能为空,或者有可能有不定个表为空的情况,我想做一个查询统计。统计出当前所有存在的主键的数据,就想我最后那个写的那样。
pt1314917 2009-12-01
  • 打赏
  • 举报
回复

--修改下:
select pk_col=coalesce(a.pk_col,b.pk_col,c.pk_col),a.col1,a.col2,a.col3,b.col1,b.col2,b.col3,c.col1,c.col2,c.col3 from
tablea a full join tableb b on a.pk_col=b.pk_col
full join TableC c on isnull(a.pk_col,b.pk_col)=c.pk_col
pt1314917 2009-12-01
  • 打赏
  • 举报
回复



select pk_col=coalesce(a.pk_col,b.pk_col,c.pk_col),a.col1,a.col2,a.col3,b.col1,b.col2,b.col3,c.col1,c.col2,c.col3 from
tablea a full join tableb b on a.pk_col=b.pk_col
full join TableC c on a.pk_col=c.pk_col
jackwater 2009-12-01
  • 打赏
  • 举报
回复
现在我有三个表
TableA: TableB: TableC
PK_Col Col1 Col2 Col3 PK_Col Col1 Col2 Col3 PK_Col Col1 Col2 Col3
101 a1 a2 a3 101 e1 e2 e3 101 x1 x2 x3
102 b1 b2 b3 103 g1 g2 g3 102 y1 y2 y3
103 c1 c2 c3

我在这里面举了这个例子,实际的情况也许会是A表中没有数据,B表和C表是现在的情况,请问各位这样怎么写?
jackwater 2009-12-01
  • 打赏
  • 举报
回复
PK_Col Col1 Col2 Col3 Col1 Col2 Col3 Col1 Col2 Col3
101 a1 a2 a3 e1 e2 e3 x1 x2 x3
102 b1 b2 b3 y1 y2 y3
103 c1 c2 c3 g1 g2 g3
我写错了,不好意思。
icelovey 2009-12-01
  • 打赏
  • 举报
回复

看不懂楼主的结果了, 这样应该对把

SELECT
a.*, b.col1, b.col2, b.col3, c.col1, c.col2, c.col3
FROM a LEFT JOIN b on a.PK_Col=b.PK_Col
LEFT JOIN c on a.PK_Col=c.PK_Col
--小F-- 2009-12-01
  • 打赏
  • 举报
回复
select
a.*,b.col1,b.col2,b.col3,c.col1,c.col2,c.col3
from
tablea a
left join tableb b on
a.pk_col=b.pk_col
left join TableC c on
a.pk_col=c.pk_col
--小F-- 2009-12-01
  • 打赏
  • 举报
回复
如果在下面 直接left join
百年树人 2009-12-01
  • 打赏
  • 举报
回复
select 
a.*,
b.col1,
b.col2,
b.col3,
c.col1,
c.col2,
c.col3
from
a
left join b on a.PK_Col=b.PK_Col
left join c on a.PK_Col=c.PK_Col
qqzeng-ip 2009-12-01
  • 打赏
  • 举报
回复
union all ..
pt1314917 2009-12-01
  • 打赏
  • 举报
回复

--这样?

select a.*,b.col1,b.col2,b.col3,c.col1,c.col2,c.col3 from
tablea a left join tableb b on a.pk_col=b.pk_col
left join TableC c on a.pk_col=c.pk_col

--小F-- 2009-12-01
  • 打赏
  • 举报
回复
TableB的几列怎么都对到102上面去了
liangCK 2009-12-01
  • 打赏
  • 举报
回复
tableA的pk_col为102对应于TableB的pk_col为103的?
pt1314917 2009-12-01
  • 打赏
  • 举报
回复
g1 g2 g3不是对应103吗?为什么在结果中在102那行显示呢?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧