Re: Update using non-existent fields does not throw an error

Поиск
Список
Период
Сортировка
От Albe Laurenz
Тема Re: Update using non-existent fields does not throw an error
Дата
Msg-id A737B7A37273E048B164557ADEF4A58B365A77BB@ntex2010i.host.magwien.gv.at
обсуждение исходный текст
Ответ на Update using non-existent fields does not throw an error  (Rob Richardson <RDRichardson@rad-con.com>)
Ответы Re: Update using non-existent fields does not throw an error  (Rob Richardson <RDRichardson@rad-con.com>)
Список pgsql-general
Rob Richardson wrote:
> An update query is apparently succeeding, even though the query refers to fields that do not exist.
> Here’s the query:
> 
> update inventory set
> x_coordinate = (select x_coordinate from bases where base = '101'),
> y_coordinate = (select y_coordinate from bases where base = '101')
> where charge = 100
> 
> -- select x_coordinate, y_coordinate from bases where base = '101'
> 
> When I run the update query, it tells me that the query succeeded and that four records were updated,
> which is what I expect.  But when I looked at the inventory table, I found that the four records were
> unchanged.  So, I tried to check the values of the base coordinates by running the select statement
> shown above.  That statement threw an error complaining that x_coordinate and y_coordinate did not
> exist.  This is correct; I should have been querying a view that includes those fields.  But why
> didn’t the update statement throw an error?

That's an old one.

Since there is no "x_coordinate" in "bases", the column will refer to "x_coordinate" from
the outer query.  So you set "x_coordinate" and "y_coordinate" to their old values.

You can avoid problems like that by using column names that are qualified with the table name.

Yours,
Laurenz Albe

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

Предыдущее
От: Alban Hertroys
Дата:
Сообщение: Re: Update using non-existent fields does not throw an error
Следующее
От: Rob Richardson
Дата:
Сообщение: Re: Update using non-existent fields does not throw an error