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
当前我是用这种方式实现的。
我想是应该会有更好的方案的。
@Cornelius: 据我所知,由于0不是表中的值,通过笛卡尔积是得不到的。
@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: 还是需要用isnull处理null的问题。
join
试过之后再说
表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
效果:
所以我才提问看有没有 由 表A 和 表B 实现 表C的方案嘛。
想要的 表C 可以 在表A和表B的 笛卡尔积 中提出来,只是不知道如何提取。
记得是有关键字可以实现的。。或许是我记错了
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表结构
你试过 结果是 表C的结果吗?
@Cornelius: 你试试就知道了,结果肯定是这样,你搜索一下select into语法
@Cornelius: 利用select into 语法把一个结果集查询到一张表中,这个结果集就是你自己的select内容
@chengeng: 呵呵
看你对于数据处理要求,如果有相同字段的就用left jion(而且需要对等),如果要是简单的连接那就union把!
还记得使用 union 的前提条件吗?
你可以用union 然后你不是B 有些字段没有啊。你可以自己添加
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一样的结果。可能不是最简单的方法,但一定是可行的