如果不存在条件mysql则插入一个元组

Posted

技术标签:

【中文标题】如果不存在条件mysql则插入一个元组【英文标题】:insert a tuple if not exists a condition mysql 【发布时间】:2021-05-03 05:23:06 【问题描述】:

如果满足条件,我想编写一个插入到元组中的查询。 例如

表 r:

CREATE TABLE r(A INT, B INT)

表b:

CREATE TABLE b(C INT, D INT, E INT)

如果 b 中没有像 (1, 2, 2) 这样的元组,我想将元组 (1,1) 插入到 r 中。

我尝试了这个查询,但出现语法错误:

IF NOT EXISTS(SELECT * FROM b WHERE C=1 AND D=2 AND E=2)
Begin
    INSERT INTO r VALUES(1, 1)
End

有没有办法做到这一点?

【问题讨论】:

您是通过程序执行此操作吗?因为从代码中通过两个查询很容易做到这一点。 @TimRoberts 不,我没有使用任何第三方语言,只是 SQL 查询。 (这是我作业的一部分) 在阅读文档时,流控制语句只能在存储过程中使用。你在课堂上学习过存储过程吗? 【参考方案1】:

您可以使用以下 SQL 查询。在上面的帖子中,您尝试使用程序,但这不是正确的方法;按照给定的链接了解更多关于procedure

INSERT INTO r (A,B)
SELECT * FROM (SELECT 1 AS A, 1 AS B) AS temp
WHERE NOT EXISTS (
    SELECT * FROM b WHERE C=1 AND D=2 AND E=2
) LIMIT 1;

【讨论】:

【参考方案2】:

我建议这样写:

INSERT INTO r (A, B)
    SELECT 1, 1
    WHERE NOT EXISTS (SELECT 1 FROM b WHERE C = 1 AND D = 2 AND E = 2);

【讨论】:

以上是关于如果不存在条件mysql则插入一个元组的主要内容,如果未能解决你的问题,请参考以下文章

如果不存在则插入记录的MySQL条件[重复]

MySQL INSERT插入条件判断:如果不存在则插入

元组不可变,你真的确定吗?有了列表,元组存在的意义又是什么?一文搞懂

mysql 指定的字段如果重复(已存在),则不再插入

mysql 条件插入 - 如果不存在插入

如果记录存在则插入和更新,否则不存在竞争条件