首页 新闻 搜索 专区 学院

SQL 如何将 两个table 的 字段怎么 合并到一张表

0
[已解决问题] 解决于 2018-03-29 08:35

如图,如何将表A和表B合并成表C。记得sql有一个关键字可以实现,可怎么就是想不起来了。

Cornelius的主页 Cornelius | 初学一级 | 园豆:80
提问于:2014-10-17 19:27
< >
分享
最佳答案
0

select isnull(tb.Cate_no,'SL2-L1'),ta.Size_no,ta.Size_name,isnull(tb.Qty,0)

from @t_a ta

left join @t_b tb on ta.Size_no=tb.Size_no and tz.Size_name=tb.Size_name

奖励园豆:5
gltide | 菜鸟二级 |园豆:403 | 2014-10-18 01:05

当前我是用这种方式实现的。

我想是应该会有更好的方案的。

Cornelius | 园豆:80 (初学一级) | 2014-10-18 13:07

@Cornelius: 据我所知,由于0不是表中的值,通过笛卡尔积是得不到的。

gltide | 园豆:403 (菜鸟二级) | 2014-10-18 16:24

@gltide: 先笛卡尔积 再 left join,目前的方式:

select b.Cate_no,
       a.Size_no,
       a.Size_name,
       isnull(c.Qty,0) 'Qty'
 from (select distinct Cate_no from 表B) b
 cross join 表A a
 left join 表B c on b.Cate_no=c.Cate_no and a.Size_no=c.Size_no

 

Cornelius | 园豆:80 (初学一级) | 2014-10-21 17:02

@Cornelius: 还是需要用isnull处理null的问题。

gltide | 园豆:403 (菜鸟二级) | 2014-10-22 09:48
其他回答(6)
0

join

ayiis | 园豆:356 (菜鸟二级) | 2014-10-17 21:41

试过之后再说

支持(0) 反对(0) Cornelius | 园豆:80 (初学一级) | 2014-10-18 13:05
0

表A Left join 表B,表C的 Cate_no 可能为空,因为在表B中找不到对应

 1 DECLARE @t_a TABLE(Size_no VARCHAR(50),Size_name VARCHAR(50))
 2 INSERT @t_a( Size_no, Size_name ) VALUES( 'S1','1')
 3 INSERT @t_a( Size_no, Size_name ) VALUES( 'S2','2')
 4 INSERT @t_a( Size_no, Size_name ) VALUES( 'S3','3')
 5 INSERT @t_a( Size_no, Size_name ) VALUES( 'S4','4')
 6 INSERT @t_a( Size_no, Size_name ) VALUES( 'S5','5')
 7 INSERT @t_a( Size_no, Size_name ) VALUES( 'S6','6')
 8 INSERT @t_a( Size_no, Size_name ) VALUES( 'S7','7')
 9 INSERT @t_a( Size_no, Size_name ) VALUES( 'S8','8')
10 INSERT @t_a( Size_no, Size_name ) VALUES( 'S9','9')
11 INSERT @t_a( Size_no, Size_name ) VALUES( 'S10','10')
12 
13 DECLARE @t_b TABLE(Cate_no VARCHAR(50),Size_no VARCHAR(50),Size_name VARCHAR(50),Qty INT)
14 INSERT @t_b( Cate_no, Size_no, Size_name, Qty ) VALUES  ( 'SL2-L1', 'S2', '2', 500)
15 INSERT @t_b( Cate_no, Size_no, Size_name, Qty ) VALUES  ( 'SL2-L1', 'S5', '5', 300)
16 INSERT @t_b( Cate_no, Size_no, Size_name, Qty ) VALUES  ( 'SL2-L1', 'S6', '6', 400)
17 INSERT @t_b( Cate_no, Size_no, Size_name, Qty ) VALUES  ( 'SL2-L1', 'S8', '8', 345)
18 
19 SELECT tb.Cate_no,ta.Size_no,ta.Size_name,tb.Qty
20 FROM @t_a ta
21 LEFT JOIN @t_b tb ON ta.Size_no=tb.Size_no AND ta.Size_name=tb.Size_name

 

效果:

 

 

佬唐 | 园豆:203 (菜鸟二级) | 2014-10-17 23:12

所以我才提问看有没有 由 表A 和 表B 实现 表C的方案嘛。

想要的 表C 可以 在表A和表B的 笛卡尔积 中提出来,只是不知道如何提取。

记得是有关键字可以实现的。。或许是我记错了

支持(0) 反对(0) Cornelius | 园豆:80 (初学一级) | 2014-10-18 13:12
0

 

select 

  B.Cate_no,B.Size_no

     ,A.SizeName

     ,B.Qty

into C

from B

left join A

where A.Size_no=B.Size_no

 

C表结构不存在的话会自动创建表结构

 

==========================

另一种需要创建好表结构的方式,

insert into C(字段)

select 想要的字段 from A 关联B

 

你用第一种就好,简单方便一点,自动创建C表结构

 

 

chengeng | 园豆:292 (菜鸟二级) | 2014-10-18 10:35

你试过 结果是 表C的结果吗?

支持(0) 反对(0) Cornelius | 园豆:80 (初学一级) | 2014-10-18 13:39

@Cornelius: 你试试就知道了,结果肯定是这样,你搜索一下select into语法

支持(1) 反对(0) chengeng | 园豆:292 (菜鸟二级) | 2014-10-18 13:43

@Cornelius: 利用select into 语法把一个结果集查询到一张表中,这个结果集就是你自己的select内容

支持(0) 反对(0) chengeng | 园豆:292 (菜鸟二级) | 2014-10-18 13:44

@chengeng: 呵呵

支持(0) 反对(0) Cornelius | 园豆:80 (初学一级) | 2014-10-21 16:49
0

看你对于数据处理要求,如果有相同字段的就用left jion(而且需要对等),如果要是简单的连接那就union把!

IT_小子 | 园豆:17 (初学一级) | 2014-10-18 19:58

还记得使用 union 的前提条件吗?

支持(1) 反对(0) Cornelius | 园豆:80 (初学一级) | 2014-10-21 16:50
0

你可以用union 然后你不是B 有些字段没有啊。你可以自己添加

我是糖糖 | 园豆:446 (菜鸟二级) | 2014-10-19 19:03
0

Create Table C(cate_no char(10) NULL Default 'CL2-L1',size_no char(10) NULL,size_name int NULL,Qty int NULL Default 0);
Create View beforeC As
Select cate_no,A.size_no,A.size_name,Qty
From A left outer join B
On A.size_no=B.size_no;
Insert Into C(cate_no,A.size_no,A.size_name,Qty)
Select *
From beforeC;
Update C
Set cate_no='CL2-L1'
Where cate_no is NUll;
Update C
Set Qty='0'
Where Qty is NUll;
Select *
From C;

我试了,就是C一样的结果。可能不是最简单的方法,但一定是可行的

巴巴木木 | 园豆:202 (菜鸟二级) | 2017-11-21 16:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册