From: | Flavio Ricci <flavio(dot)ricci82(at)gmail(dot)com> |
---|---|
To: | Pantelis Theodosiou <ypercube(at)gmail(dot)com> |
Cc: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Subject: | Re: BUG #16834: where-in: if the nested query fails, the parent query returns all the records |
Date: | 2021-01-22 15:19:58 |
Message-ID: | CADozjCaX=Y6gustuVmDFvrbm1wgpfJhf=WjgJVgW8hTvFzbPiQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Hi Theodosiou,,
thank you very much for your answer
It seems that I ran into a tricky situation, but your explanation helped me
definitely about what is happening behind the curtains
Thanks again
Best regards,
Flavio
Il giorno ven 22 gen 2021 alle ore 15:49 Pantelis Theodosiou <
ypercube(at)gmail(dot)com> ha scritto:
>
>
> On Fri, Jan 22, 2021 at 2:38 PM Pantelis Theodosiou <ypercube(at)gmail(dot)com>
> wrote:
>
>>
>>
>> On Fri, Jan 22, 2021 at 12:57 PM PG Bug reporting form <
>> noreply(at)postgresql(dot)org> wrote:
>>
>>> The following bug has been logged on the website:
>>>
>>> Bug reference: 16834
>>> Logged by: Flavio Ricci
>>> Email address: flavio(dot)ricci82(at)gmail(dot)com
>>> PostgreSQL version: 11.9
>>> Operating system: x86_64-pc-linux-gnu
>>> Description:
>>>
>>> Hi,
>>>
>>> I have found out that in a where-in query if the nested query fails, the
>>> parent query returns all the records if the where condition field matches
>>> with the selected field in the inner query.
>>> Example:
>>> SELECT *
>>> FROM table_a
>>> WHERE field_only_in_parent_table IN (
>>> SELECT field_only_in_parent_table
>>> FROM table_b
>>> WHERE name = 'John Doe')
>>>
>>> If you run only the nested query it fails because the field does not
>>> exist
>>> for table_b
>>> If you run all the query, it returns all the records of table_a
>>>
>>> Regards,
>>>
>>> Flavio
>>>
>>
>> This is not a bug. Returning all records of the parent table is the
>> correct result, due to scope resolution.
>>
>> The column field_only_in_parent_table does not have a table prefix so it
>> is first checked whether it's a column of the immediate tables (table_b
>> here). Since the column is not there, the next level tables are checked
>> (table_a here). It is a there so the query is executed as:
>>
>> SELECT *
>> FROM table_a
>> WHERE field_only_in_parent_table IN (
>> SELECT table_a.field_only_in_parent_table
>> FROM table_b
>> WHERE name = 'John Doe')
>>
>
> To be accurate the rows of table a that are returned are the ones wit
> non-null values in field_only_in_parent_table and only if table b has at
> least one row.
> If table b has 0 rows, then the query returns no rows.
>
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2021-01-22 15:23:31 | Re: BUG #16833: postgresql 13.1 process crash every hour |
Previous Message | Pantelis Theodosiou | 2021-01-22 14:48:56 | Re: BUG #16834: where-in: if the nested query fails, the parent query returns all the records |