7

我正在处理一些代码。有几个查询,其效果是,如果行存在并填充了一些数据,则使用其余数据更新该行,如果该行不存在,则创建一个新行。它们看起来像这样:

插入表名(col1,col2,col3)
选择 %s 作为 COL1、%s 作为 COL2、%s 作为 COL3
从(选择 %s 作为 COL1,%s 作为 COL2,%s 作为 COL3)A
左连接表名 B
开 B.COL1 = %s
AND B.COL2 = %s --注意:这里没有提到所有列
B.id 为空
限制 1

我可以模仿这种模式并且它似乎有效,但我对幕后实际发生的事情感到困惑。谁能阐明这实际上是如何工作的?我正在使用 PostgreSQL。

4

2 回答 2

3

您确定仅使用那段代码进行更新吗?

令人高兴的是,您正在使用 table_name(要插入新记录的表)进行左连接,并仅过滤该表中不存在的行。(其中 B.id 为空)

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

希望我的回答能帮到你。

问候。

于 2010-06-25T16:14:59.543 回答
1

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

我有兴趣知道什么%s

于 2010-06-25T16:14:47.657 回答