Я работаю с некоторым кодом. Существует несколько запросов, эффект которых состоит в том, что если строка существует с некоторыми заполненными данными, то эта строка обновляется с остальными данными, а если строка не существует, создается новый. Они выглядят так:
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.