【发布时间】:2017-12-30 04:19:45
【问题描述】:
我有两个同一个数据库的表,比如说 D,两个表是 T1 和 T2。 T1 具有属性 a1,a2...an 并且 t2 具有属性 a1,a2。我想要一个查询,仅当 T1.a1=T2.a1 时才可以用 T2 的值更新 T1 的值,否则插入到 T1 中。示例:
【问题讨论】:
标签: mysql
我有两个同一个数据库的表,比如说 D,两个表是 T1 和 T2。 T1 具有属性 a1,a2...an 并且 t2 具有属性 a1,a2。我想要一个查询,仅当 T1.a1=T2.a1 时才可以用 T2 的值更新 T1 的值,否则插入到 T1 中。示例:
【问题讨论】:
标签: mysql
您至少有三个选项:
create as select 重新创建表replace into 语法(参见:Replace Into Query Syntax)要遵循的示例和详细信息...
drop table t1;
create table t1 as select * from t2;
将 t1.a1 和 t2.a1 设置为两个表的主键。 运行:
Replace into t1(a1,a2) select a1, a2 from t2;
UPDATE t1
INNER JOIN t2 ON t1.a1 = t2.a1
SET t1.a2 = t2.a2 where t1.a1 = t2.a1;
insert into t1(a1, a2) select a1, s2 from t2 where t2.a1 not in (select a1 from t1);
【讨论】:
delete from t1 where not exists (select 1 from t2 where t2.a1 = t1.a1)
你可以试试这样的:
INSERT INTO T1 (you columns list) VALUES (here select your values from T2 with restriction) ON DUPLICATE KEY UPDATE `a2`=values(`a2`)
【讨论】:
INSERT INTO T1 (a1, a2) VALUES (SELECT a1, a2 FROM T2) ON DUPLICATE KEY UPDATE a2=values(a2); 我以为 a1 是你的表 T1 的主键。
这是我理解问题的方式的回答。如果这不是您想要的,也许您可以澄清一下。在问题 a1 和 a2 看起来像表中的字段。但是,在您的输出期望中,它们看起来像另一列的值。
insert t1(a1,a2,a3)
select t2.a1,t2.a2,t2.a3 from t2
left join t1 on t1.a1 = t2.a2
where t1.a1 is null
update t1
set t1.a1 = t2.a1, t1.a2 = t2.a2, t1.a3 = t2.a3
from t1 inner join t2 on t1.a1 = t2.a2
/*
table data before record changes
t1
a1 a2 a3
---------- ---------- ----------
bar foo fizz
yin yang zen
vidi vini vici
lug lag lugger
dig dug digger
zoom zimm zammy
riki tiki tavi
yuz wuz wiz
bip bap boop
zip zap zing
ding aling aling
t2
a1 a2 a3
---------- ---------- ----------
foo bar fizz
yuz wuz wiz
vini vidi vici
bip bap boop
zip zap zing
ding aling aling
zimm zoom zumm
t1 data after record changes
t1
a1 a2 a3
---------- ---------- ----------
foo bar fizz
yin yang zen
vini vidi vici
lug lag lugger
dig dug digger
zimm zoom zumm
riki tiki tavi
yuz wuz wiz
bip bap boop
zip zap zing
ding aling aling
yuz wuz wiz
bip bap boop
zip zap zing
ding aling aling
*/
【讨论】: