SQL 选择并插入(如果不存在)

Posted

技术标签:

【中文标题】SQL 选择并插入(如果不存在)【英文标题】:SQL select and insert if not exists 【发布时间】:2015-02-19 14:45:24 【问题描述】:

我想做一个可以插入 table1 的 sql 查询。此表使用 table2_id 外键引用 table2。

到目前为止,我的 sql 看起来像这样:

INSERT INTO table1 (table1_id, name, date, table2_id) 
VALUES (1, "somename", "29.04.2014", (SELECT id FROM table 2 WHERE table2.name = "BOB")  )

如果找不到 table2.name,我也想将值插入 table2,然后将 key 插入 table1。

有人知道怎么做吗?

【问题讨论】:

为便于阅读而编辑 【参考方案1】:

我建议你使用insert . . . select 而不是insert . . . values

INSERT INTO hovedenhet (organisasjonsnummer, navn, stiftelsesdato, registreringsdatoEnhetsregisteret, organisasjonsform_id) 
    SELECT 813550202, 'SAMEIET SCHWEIGAARDSGATE 21-23', '10.01.2014', '29.04.2014', id
    FROM organisasjonsformhovedenhet oh
    WHERE oh.organisasjonsform = 'BOB';

如果没有匹配项,您的原始查询将为最后一列插入具有NULL 值的行。在这种情况下,这不会插入任何内容。

【讨论】:

INSERT 更改为INSERT IGNORE 以避免“重复键错误”。

以上是关于SQL 选择并插入(如果不存在)的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中的存储过程,它采用表值参数并插入不存在的并返回存在的

HSQLDB 如果不存在则插入,如果存在则更新

sql - 如果不存在则插入

SQL检查是不是存在并插入[重复]

如果不存在则插入数据的过程pl sql

SQL语句 存在就更新不存在就插入