Re: BUG #16834: where-in: if the nested query fails, the parent query returns all the records

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.
>

In response to

Browse pgsql-bugs by date

  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