gpt4 book ai didi

sqlite - 使用insert into database.table1从表2中选择*,其中id = some_value;

转载 作者:行者123 更新时间:2023-12-03 17:56:05 25 4
gpt4 key购买 nike

我想将一行从数据库中的表复制到另一个数据库中的相同表。为了测试,我创建了这个:

CREATE TABLE stuff  (absid integer primary key, otherfield string );


'stuff'与上面的两个数据库 testdb1testdb2中的表相同。然后我在 'stuff'testdb1中放入两行。然后,可以从命令行将一行从一个数据库复制到另一个数据库,因此:

prompt> sqlite3 testdb1

sqlite> attach database testdb2 as testdb2;

sqlite> insert into testdb2.stuff select * from stuff where absid=2;

sqlite> ^d

prompt>


到目前为止,一切都很好。但是:在我真正想要真正做到这一点的应用程序中,很可能会发生关键冲突。例如,如果我使用上述序列将行复制回 testdb1,则会得到:

SQL error: PRIMARY KEY must be unique


我想发生的是,当复制该行时,如果发生冲突,将自动选择一个新的唯一的绝对值。有什么办法可以用上面更复杂的 select * ...指定它吗?

我想我可以通过以下方法解决这个问题:在表中创建另一个具有相同表但没有主键约束的数据库(例如,在内存中),并分两步进行复制(将absid设置为null)。如果存在的话更聪明。

最佳答案

您可以指定列,省去主键列,插入的新行将激活自动键生成。例如,假设主键位于列col1中,而列col2col4是非键列,请尝试以下操作:

sqlite> insert into testdb2.stuff (col2, col2, col4) 
select col2, col3, col4 from stuff where absid=2;


不幸的是,这意味着您不能使用“ *”通配符。 SQL中没有办法使用通配符来表示“除我指定的列以外的所有列”。

关于sqlite - 使用insert into database.table1从表2中选择*,其中id = some_value;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/669971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com