Re: UPDATE ... WHERE (subselect on the same table)

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: UPDATE ... WHERE (subselect on the same table)
Дата
Msg-id 1981.1088527795@sss.pgh.pa.us
обсуждение исходный текст
Ответ на UPDATE ... WHERE (subselect on the same table)  ("Alexander M. Pravking" <fduch@antar.bryansk.ru>)
Список pgsql-sql
"Alexander M. Pravking" <fduch@antar.bryansk.ru> writes:
> fduch=# UPDATE test SET x = 't'
> fduch-# where typ = 1 and exists (
> fduch(# SELECT 1 from test t2
> fduch(# where t2.typ = 2 and t2.name = test.name
> fduch(# );

> So I have two questions:
> Q1, cognitive. Why the alias for the updated table is restricted?

Because the SQL standard doesn't allow an alias there.  We've talked
about allowing one anyway, but no one's gotten around to it.  AFAICS
it would only be a marginal notational advantage, not allow you to
express queries you can't express today.

> Q2, vital. Can I be sure that the syntax I used here will work
> correctly, i.e. will the "test.name" always refer the column in outer
> table, not inner (t2)?

Yes.  The alias *completely* hides the real name of that table
reference, so "test" will never refer to "test t2".
        regards, tom lane


В списке pgsql-sql по дате отправления:

Предыдущее
От: "Alexander M. Pravking"
Дата:
Сообщение: Re: UPDATE ... WHERE (subselect on the same table)
Следующее
От: Stephan Szabo
Дата:
Сообщение: Re: FW: "=" operator vs. "IS"