这个SQL查询如何更新一行(如果存在),或者如果不存在,如何工作?

我正在处理一些代码。 有几个查询的效果是,如果行中存在一些填充的数据,那么该行将与其余数据一起更新,如果该行不存在,则会创建一个新行。 他们看起来像这样:

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。


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

什么是happing是你正在做table_name(插入新记录的表)的左连接,并且只对那个表中不存在的行进行过滤。 (WHERE B.ID IS NULL)

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

我希望我的回答可以帮助你。

问候。


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

我很想知道%s是什么

链接地址: http://www.djcxy.com/p/46373.html

上一篇: How does this SQL query to update a row if exists, or insert if not, work?

下一篇: ListView with ArrayAdapter and ViewHolder adding icons to the wrong item