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

两表JOIN不取指定的表字段解决办法

2012-01-07 
两表JOIN不取指定的表字段我有两表A和BA.AB.B,A,B表中除了A.A和B.B是能确定的,A.1...A.3或B.1...B.3是不

两表JOIN不取指定的表字段
我有两表A和B   A.A=B.B,A,B表中除了A.A和   B.B是能确定的,A.1...A.3   或B.1...B.3是不确定的,有可以是A(B).1---A(B).20,也有可以是A(B).10---A(B).30,现在我想取两表JOIN的结果集,除了B.B或A.A不取,其余的全取,请问要怎样写SQL?


------------A表-------------         |     ------------B表------------
a.a         a.1             a.2           a.3     ...|     b.b       b.1         b.2       b.3   ...
不01               3     ...|     不           0       0           0     ...
服31               0     ...|     服           1       0           1     ...
家40               2     ...|     家           1       0           0     ...
食32               6     ...|     食           1       1           2     ...
行40               2     ...|     行           1       0           1     ...
租02               0     ...|     租           0       0           1     ...
合146             13     ...|     合           4       1           5     ...


谢谢赐教!


[解决办法]
declare @a varchar(5000)
declare @b varchar(5000)

select @a=coalesce(@a+ ', ', ' ')+ '[ '+name+ '] ' from syscolumns where id=object_id( 'A ') and name <> 'a ' order by colid
select @a=@a+ ', '+ '[ '+name+ '] ' from syscolumns where id=object_id( 'B ') and name <> 'b ' order by colid
set @b= 'select '+@a+ ' from A Inner Join B On A.a=B.b '
exec(@b)
[解决办法]
select @icount1 = count(*) from syscolumns where id = object_id( 'A ')
select @icount2 = count(*) from syscolumns where id = object_id( 'B ')
decalre @sql1 varchar(8000),
@sql2 varchar(8000)
decalre @i int
set @i = 1
select @sql1 = 'select ',@sql2 = ' '
while @i < @icount1
begin
set @sql1 += 'a. '+@i+ ', '
set @i+=1
end
set @i = 1
while @i < @icount2
begin
set @sql1 += 'b. '+@i+ ', '
set @i += 1
end
set @sql2 = right(@sql,1,len(@sql1)-1)
set @sql2 += 'from a,b where a.a = b.b '
exec(@sql2)
[解决办法]
1.你把临时表作成永久表不是一样吗?
2.非要用临时表,那就在tempdb..sysobjects 和tempdb..syscolumns里查

热点排行