Re: SELECT * FROM a WHERE id IN (sub query) . When sub query is incorrect . return all rows of table a
В списке pgsql-bugs по дате отправления:
| От | Tom Lane |
|---|---|
| Тема | Re: SELECT * FROM a WHERE id IN (sub query) . When sub query is incorrect . return all rows of table a |
| Дата | |
| Msg-id | 1446960.1592408269@sss.pgh.pa.us обсуждение исходный текст |
| Ответ на | SELECT * FROM a WHERE id IN (sub query) . When sub query is incorrect . return all rows of table a ("逗比请来的猴子" <xh2432@vip.qq.com>) |
| Список | pgsql-bugs |
"=?gb18030?B?trqxyMfrwLS1xLrv19M=?=" <xh2432@vip.qq.com> writes:
> When I have 2 tables like this
> create table test
> (
> id int4,
> shapeid int4
> );
> table testb
> (
> id int4
> );
> sql " select shapeid from testb; " Failed.
> but sql " select * from test where shapeid in ( SELECT shapeid FROM testb ); " return all records of table test
This is not a bug, it is behavior required by the SQL standard.
Since shapeid doesn't exist in testb, shapeid in the sub-SELECT is
just an outer reference to the column in the outer table.
> sql like this delete all records of my talbe !
Yeah, it's a common trap for SQL newbies :-(. The standard
advice is to always qualify column names in sub-selects, to
be sure of where they are coming from. If you'd written
... where shapeid in ( SELECT testb.shapeid FROM testb ) ...
then you'd have gotten an error message.
regards, tom lane
В списке pgsql-bugs по дате отправления:
Сайт использует файлы cookie для корректной работы и повышения удобства. Нажимая кнопку «Принять» или продолжая пользоваться сайтом, вы соглашаетесь на их использование в соответствии с Политикой в отношении обработки cookie ООО «ППГ», в том числе на передачу данных из файлов cookie сторонним статистическим и рекламным службам. Вы можете управлять настройками cookie через параметры вашего браузера