Эквивалентность запросов Postgres

#sql #postgresql #relational-database

#sql #postgresql #реляционная база данных

Вопрос:

Я хотел бы знать, дают ли эти два запроса одинаковый результат:

     update A.cred
set user_name = concat(CURRENT_TIMESTAMP::text)
from A.temp_table2 tt
WHERE email NOT IN (select email from A.temp_table2 it
join A.cred c on c.user_name = it.email
join A.at a on a.ld = c.ld
join A.ap ar on ar.cd = a.ad)
AND tt.email = A.cred.user_name


    update A.cred c
join A.temp_table t on t.email = c.user_name
set user_name = concat(CURRENT_TIMESTAMP::text)
WHERE c.user_name NOT IN (select t.email from A.temp_table2 t
join A.cred c on c.user_name = t.email
join A.at a on a.ld = c.ld
join A.ap ar on ar.cd = a.ad)
  

Кроме того, если кто-нибудь может объяснить мне, почему один лучше другого, пожалуйста, перечислите для меня.

Комментарии:

1. Второй не будет компилироваться.

2. Следовательно, первое лучше.

3. Помимо того факта, что второй недействителен и не будет выполняться: concat(CURRENT_TIMESTAMP::text) не имеет никакого смысла. user_name = CURRENT_TIMESTAMP::text достаточно. Но я не понимаю, почему столбец user_name должен хранить текущую дату и время в виде строкового значения. Если это действительно «имя пользователя», то это не имеет смысла. Если это действительно какое-то значение даты и времени, то оно должно храниться timestamp не как text

4. @GordonLinoff но второй быстрее!