首页 文章

如果存在,或者如果不存在,则此SQL查询如何更新行?

提问于
浏览
7

我正在使用一些代码 . 有几个查询的效果是,如果行中存在一些数据,则该行将使用其余数据进行更新,如果该行不存在,则会创建一个新行 . 它们看起来像这样:

INSERT INTO table_name (col1, col2, col3)
SELECT %s AS COL1, %s AS COL2, %s AS COL3
FROM ( SELECT %s AS COL1, %s AS COL2, %s AS COL3 ) A
LEFT JOIN table_name B
ON  B.COL1 = %s
AND B.COL2 = %s     --note: doesn't mention all columns here
WHERE B.id IS NULL
LIMIT 1

我可以模仿这种模式,它似乎有效,但我对幕后的实际情况感到困惑 . 任何人都可以阐明这实际上是如何运作的吗?我正在使用PostgreSQL .

2 回答

  • 1

    你确定只使用那段代码进行更新吗?

    讨厌的是你正在使用table_name(插入新记录的表)进行左连接,并仅对该表中不存在的行进行过滤 . (WHERE B.id IS NULL)

    就像做“不存在”,只是以不同的方式 .

    我希望我的回答可以帮到你 .

    问候 .

  • 3

    LEFT JOIN / IS NULL表示查询是INSERTing尚不存在的记录 . 假设在INSERT子句中定义的表与LEFT JOIN子句中的表相同 - 小心抽象...

    我很想知道 %s 是什么

相关问题