考虑两个具有时间戳和数据列的表。我需要构造一个执行以下操作的SQL:
如果表中没有时间戳值,则在一个表中插入数据(唯一时间戳和数据列)("在表1中插入我的数据以获取时间戳=" 12:00 1999- 01-01"仅当表1中没有该时间戳时...)
否则,在没有任何检查的情况下在不同的表中插入非常相同的数据,并在必要时覆盖(...否则在表2中插入相同的字段集)。
我怎样才能在SQL上实现这一点?我可以使用客户端来做到这一点,但速度要慢一些。我使用MySQL
答案 0 :(得分:1)
首先运行第二个项目符号的查询。即,如果表1中存在数据,则将数据插入表2中
insert into table2 (data, timestamp)
select 'myData', '12:00 1999-01-01'
from table1
where exists (
select 1 from table1
where timestamp = '12:00 1999-01-01'
)
limit 1
然后运行您的第一个项目符号的查询,即只有在数据不存在的情况下插入到表1中
insert into table1 (data, timestamp)
select 'myData', '12:00 1999-01-01'
from table1
where not exists (
select 1 from table1
where timestamp = '12:00 1999-01-01'
)
limit 1
运行这两个查询将始终只将1行插入1个表中,因为如果该行存在于table1中,则第二个查询的not exists
条件将为false,如果它不存在于table1中,那么第一个查询的exists
条件将为false。
您可能需要考虑在table1上创建一个唯一约束来自动防止重复,以便您可以使用insert ignore
来插入table1
alter table table1 add constraint myIndex (timestamp);
insert ignore into table1 (data,timestamp) values ('myData','12:00 1999-01-01');
答案 1 :(得分:0)
regural INSERT
语句只能将记录插入一个表中。您有两个选择:
无论你选择哪条路线,我都会