根据一个表的字段查询在另一个表中查询数据

Leason1989 2012-04-09 10:45:29
现在有两张表T1和T2,T1中有字段C1,C2,C3,D1 T2中有字段C1,C2,C3,现在我要根据T2中的字段在T1中查询数据然后把这些数据插入到T2表中,该怎么写sql语句?
...全文
2979 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leason1989 2012-04-09
  • 打赏
  • 举报
回复
十分感谢
  • 打赏
  • 举报
回复

go
create table t1(
C1 INT,
C2 INT,
C3 INT
)
go
create table t2(
C1 INT,
C2 INT,
C3 INT,
D1 INT
)
declare @str varchar(2000)
set @str=''
select @str=@str+','+name from syscolumns where id=object_id('t1')
and exists(select 1 from(select name
from syscolumns where id=object_id('t2'))a where a.name=name)
set @str='insert t2 select '+right(@str,len(@str)-1)+' from t1'
print @str
--insert t2 select C1,C2,C3 from t1
--你只需动态执行
exec(@str)
  • 打赏
  • 举报
回复
不确定就动态啊,先把两个表的相同的字段给查询出来,然后在处理
--获取一个表的所有字段
select name from syscolumns where id=object_id('表名')
Leason1989 2012-04-09
  • 打赏
  • 举报
回复
但是表字段不确定啊,因为要操作的表会有变动。不能这么直接把字段C1,C2,给写死了,只能根据表名来确定字段,这该怎么写?[Quote=引用 9 楼 的回复:]
SQL code

insert T2
select C1,C2,C3 from T1
[/Quote]
  • 打赏
  • 举报
回复

insert T2
select C1,C2,C3 from T1
Leason1989 2012-04-09
  • 打赏
  • 举报
回复
对上面的补充,如果两个表结构完全一样的,直接用insert into T2 select * T1就行了,表结构不太一样,改怎么写呢?就是这个意思
Leason1989 2012-04-09
  • 打赏
  • 举报
回复
对上面的补充,如果两个表结构完全一样的,直接用insert into T2 select * T1就行了,表结构不太一样,改怎么写呢?就是这个意思
Leason1989 2012-04-09
  • 打赏
  • 举报
回复
好吧,就是两张表T1(C1,C2,D1),T2(C1,C2),T1中有两条数据(data1C1,data1C2,data1D1)(data2C1,data2C2,data2D1),然后我要根据T2中的字段把(data1C1,data1C2)(data2C1,data2C2)插入到T2中,上面的字段只是举例,实际只能通过表名来查询出字段名。这次不知道说清楚没。。。。。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

刚才可能没说清楚,意思就是现在有两张表T1和T2,现在我要根据T2中的字段去T1中查询数据,也就是select t2的字段 from t1,然后把查询出来的数据插入到表t2中。t1的字段和t2的字段相比只是多出了一列,其他的完全一样。在程序中我接收到的参数只有表名,只能通过表名来查询出字段名,所以不能像select 1 from T2 b where a.C1=b.c1 and a.C2=b.c……
[/Quote]

那你还是没说清楚。给测试数据和结果。不要文字描述了
ZXUN_XUE 2012-04-09
  • 打赏
  • 举报
回复
不好意思,没分了,求帮忙
TD004 TD010
3INKSX0636M 270.00000000
3INKSX0541C 270.00000000
3INKSX0004M 270.00000000
3INKBTT307W 480.00000000
3INKBTL0288 160.00000000
3INKBTCG11M 480.00000000
3INKBT0229D 230.00000000
3INKBT0229D 240.00000000

3CTSLB00C50 72.00000000 例如:想要的数据同一个品号只把有不同的单价显示出来
3CTSLB00C50 80.00000000 想要的数据同一个品号只把有不同的单价显示出来

怎么写呢?
Leason1989 2012-04-09
  • 打赏
  • 举报
回复
刚才可能没说清楚,意思就是现在有两张表T1和T2,现在我要根据T2中的字段去T1中查询数据,也就是select t2的字段 from t1,然后把查询出来的数据插入到表t2中。t1的字段和t2的字段相比只是多出了一列,其他的完全一样。在程序中我接收到的参数只有表名,只能通过表名来查询出字段名,所以不能像select 1 from T2 b where a.C1=b.c1 and a.C2=b.c2 and a.C3=b.c3)这样查询。请教大神该如何实现?
  • 打赏
  • 举报
回复

--查询T1中存在的T2的记录
insert T2
select * from T1 a
where exists(select 1 from T2 b where a.C1=b.c1 and a.C2=b.c2 and a.C3=b.c3)
--查询T1中不存在的T2的记录
insert T2
select * from T1 a
where not exists(select 1 from T2 b where a.C1=b.c1 and a.C2=b.c2 and a.C3=b.c3)


koumingjie 2012-04-09
  • 打赏
  • 举报
回复
需求说的不明确
用数据举个例子吧

34,588

社区成员

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

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