1、首先你要保证你的两个表都有主键,或者有关联字段。
例如:
表A(id,name,date)
id是主键
表B(id,name,date)
id是主键
1)导入B数据数据到A表保留date字段值(确切的说这种情况应该叫利用【B】表数据更新【A】表数据),用下面的sql就可以达到目的:
update
A
set
A.date=(select
B.date
from
B
where
B.id=A.id);
说明:这样做的话要保证A表和B表都有数据并且id字段能够关联上,而且这样修改的数据只是关联上的数据,假设A表中有【id=1】的数据而B表中没有
【id=1】的数据,那么A表中【id=1】的数据就不会被修改。
2)如果A表和B表都没有主键的话,那么寻找一个能够关联两个表数据的字段(这个字段可以从一定意义上作为"主键"区分表中数据),假设是id和name字段联合起来:
update
A
set
A.date=(select
B.date
from
B
where
B.id=A.id
and
B.name=A.name);
说明:在这个更新中更新条目也只限定于能够关联上的数据。
3)如果A表中没有数据只是想把B表中的数据全部插入A表(B表中date字段的值必须被保留的话)
insert
into
A
select
*
from
B;
说明:在这个语句中,把B表中所有的数据不加修改的全部放入了B表,自然也就包含了date字段的值不变。
insert
intp
A
select
1,'张三',date
from
B;
说明:在这个语句中,把B表中的date字段的只保留,id和name字段分别换成了【1】和【张三】(当然是所有数据的id和name字段都换了)
2、综合上面的观点
1)如果表1没有数据:insert
into
表1
select
*
from
表2;
2)如果表1中有数据,并且和表2中的数据完全关联的上的话:
update
表1
set
表1.sj=(select
表2.sj
from
表2
where
表2.字段X=表1.字段X
and....);
3)如果表1中有数据,但是表2中只有一部分能够关联上,目的是关联上的更新,关联不上的插入表1的话:
先:update
表1
set
表1.sj=(select
表2.sj
from
表2
where
表2.字段X=表1.字段X
and....);
后:insert
表1
select
*
from
表2
where
表2.关联字段X
not
in(select
表1.关联字段X
from
表1)
and
表2.关联字段Y
not
in(select
表1.关联字段Y
from
表1)....
---
以上,希望对你有所帮助。
Ⅱ SQL中如何根据一个字段查询两个表关联字段并修改
UPDATE表AA
SETA.字段1=值1,
A.字段2=值2,
A.字段3=值3
WHEREEXISTS(SELECT1
FROM表BB
WHEREA.关联字段=B.关联字段
ANDA.字段=值
ANDB.字段=值
)
Ⅲ sql server 中怎么修改在两个表中有关联的数据
一台服务器上的两个不同的
sql
server
数据库?
还是
两台服务器上的,
2个
sql
server
数据库?
一台服务器上的两个不同的
sql
server
数据库
很简单
比如你现在是
use
test1
数据库,建立一个表,叫
testa
然后
use
test2
数据库,建立一个表,叫
testb
那么要关联,就是
查询的时候,输入全路径
例如
select
检索字段
from
test1.dbo.testa
testa,
test2.dbo.testb
testb
where
关联条件
如果是跨服务器的,需要创建
数据库链接。
链接建立好以后,也是和上面的写法差不多。
Ⅳ sql 几张表互相关联 更改一张数据库信息 相应的更新相关联的数据
oracle下:
oracle只有级联删除,没有级联更新(其实是有的,只是没有on update cascade),所以要实现级联更新有两种方法:
一、在约束中定义延迟更新:alter table child_table
add constraint fk_child_parent
foreign key (id)
references parent_table (id)
initially deferred deferrable;
-- initially deferred deferrable; 这是延迟oracle的一致性检查,通过这个我们可以分别更新主表和子表,然后再提交,这样就能验证通过了,有点麻烦,呵呵,还是用触发器吧
二、通过触发器实现:
CREATE OR REPLACE TRIGGER ID_TRG AFTER UPDATE ON Section FOR EACH ROW
BEGIN
UPDATE Employee SET 部门=:NEW.部门WHERE 部门=:OLD.部门;
END;
Ⅳ SQL Server数据库多表关联如何更新
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。我们先来讨论根据其他表数据更新你要更新的表
一、MS SQL Server 多表关联更新
sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式 中引用要更新的表以外的其它数据。
一般形式:
update A SET 字段1=B表字段表达式, 字段2=B表字段表达式 from B WHERE 逻辑表达式
例如:
UPDATE dbo.Table2
SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB
FROM dbo.Table2
INNER JOIN dbo.Table1
ON (dbo.Table2.ColA = dbo.Table1.ColA);
实际更新的操作是在要更新的表上进行的,而不是在from子句所形成的新的结果集上进行的
Ⅵ SQL数据库问题,为什么不能修改数据了
有外键关联,关联表里有数据,所以不能修改。把关联数据删掉就好了,有必要可以在删除前备份。
Ⅶ SQL数据库中表与表之间的关联怎么建立
1、在数据库窗口中,单击“创建”中“表格”中的“表设计”,打开表设计窗口。
Ⅷ 如何使用SQL语句修改表内的数据
修改表中内容
修改用到update语句,语句格式为:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
即 update 员工表 set 部门id=01 where 员工id=0004
SQL联合主键
Create Table 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
字段名3…………
字段名N………… )
(8)sql关联修改数据库扩展阅读
主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的。 建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。
在数据库提供的GUI环境中建立(以SQL7为例)。输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。
通过SQL语句执行建立。又分两种,一是在建表语句中直接写,二是建表之后更改表结构。
在建表语句中直接写:
Create Table 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
字段名3…………
字段名N………… )
Ⅸ SQL数据库里面怎样设置表与表之间的关联
你说的关联是指外键不?
SQL Server Management Studio
展开所要设置的表下面的选项,可以新建外键。这样直观,简单。
也可以用SQL语句。
Ⅹ SQL语言中把数据库中两张表数据关联起来的语句
1、创建两张测试表,
create table test_cj(name VARCHAR(20), remark varchar2(20));
create table test_kc(name VARCHAR(20), remark varchar2(20));
2、插入测试数据
insert into test_cj values('xh','cj_1');
insert into test_cj values('kcdh','cj_2');
insert into test_cj values('cj','cj_3');
insert into test_kc values('kcdh','kc_1');
insert into test_kc values('kcm','kc_2');