Я пришел с SQL Server и перенес часть кода T-SQL в Postgres.
В PostgreSQL у меня теперь есть оператор UPDATE (см. Ниже).
Там:
"#reportdata"
- временная таблица
kwt.Report
- обычная таблица
Эта часть в предложении WHERE выполняет неявное JOIN.Я думаю, что так они это называют в Postgres.
(cr.campaignid = rp.campaignid AND cr.reportdate = rp.reportdate)
Это потому, что эта пара (campaignid, reportdate) представляет уникальный логический ключ в kwt.Report.Кроме того, оба столбца не обнуляются в kwt.Report.В "#reportdata" оба столбца могут быть NULL.
Мой вопрос таков: когда я вижу такое неявное соединение в операторе UPDATE, я почему-то всегда не совсем уверен, является ли это INNER или OUTER объединением.Я думаю, что это ВНУТРЕННЕЕ, нет никакого способа быть ВНЕШНИМ, но я просто хочу быть уверен.
Может кто-нибудь подтвердить, пожалуйста?
Я имею в виду, хорошо, если rp.campaignid НЕДЕЙСТВИТЕЛЕН, нетКак это условие оценить как истинное, верно?
(cr.campaignid = rp.campaignid AND cr.reportdate = rp.reportdate)
Я спрашиваю об этом, потому что я не уверен, что сравнение с NULL работает в Postgres так же, как в SQL Server.Насколько я помню, в SQL Server NULL = a
всегда оценивается как NULL (не в true (бит 0), не в false (бит 1), но в NULL).Пожалуйста, поправьте меня, если это понимание неверно.Это то же самое в Postgres?
UPDATE kwt.Report cr
SET
impressions = rp.impressions,
clicks = rp.clicks,
views = rp.views
FROM
"#reportdata" AS rp
WHERE
(cr.campaignid = rp.campaignid AND cr.reportdate = rp.reportdate)
AND (rp.campaignid IS NOT NULL);