7

私はいくつかのコードを扱っています。一部のデータが入力された行が存在する場合、その行は残りのデータで更新され、行が存在しない場合は新しい行が作成されるという効果を持つクエリがいくつかあります。それらは次のようになります。

INSERT INTO テーブル名 (col1、col2、col3)
%s を COL1 として、%s を COL2 として、%s を COL3 として選択
FROM (%s を COL1 として、%s を COL2 として、%s を COL3 として選択) A
LEFT JOIN テーブル名 B
ON B.COL1 = %s
AND B.COL2 = %s --注: ここではすべての列について言及しているわけではありません
B.id が NULL の場合
リミット 1

私はこのパターンを模倣することができ、それは機能しているように見えますが、実際に舞台裏で何が起こっているのか混乱しています. これが実際にどのように機能するかを誰かが解明できますか? 私はPostgreSQLを使用しています。

4

2 に答える 2

3

そのコードのみを使用して更新していると確信していますか?

起こっているのは、table_name (新しいレコードを挿入するテーブル) との左結合を行っており、そのテーブルに存在しない行のみをフィルタリングしていることです。(B.id が NULL の場合)

別の方法でのみ、「存在しない」ことを行うようなものです。

私の答えがお役に立てば幸いです。

よろしく。

于 2010-06-25T16:14:59.543 に答える
1

LEFT JOIN/IS NULL は、クエリがまだ存在しないレコードを挿入していることを意味します。INSERT 句で定義されたテーブルが LEFT JOIN 句のテーブルと同じであると仮定しています - 抽象化に注意してください...

どんなものか興味%sがあります

于 2010-06-25T16:14:47.657 に答える