From: | "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> |
---|---|
To: | Sridhar N Bamandlapally <sridhar(dot)bn1(at)gmail(dot)com> |
Cc: | PG-General Mailing List <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Sub-query having NULL row returning FALSE result |
Date: | 2016-06-29 12:34:40 |
Message-ID: | CAKFQuwb8b6KuyiZ5gEufKuwqpGmErE66=L7x8uyneBp3223BHQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Wed, Jun 29, 2016 at 2:07 AM, Sridhar N Bamandlapally <
sridhar(dot)bn1(at)gmail(dot)com> wrote:
> Hi
>
> Please go through below case
>
> postgres=# CREATE TABLE emp (id INTEGER unique, ename VARCHAR);
> CREATE TABLE
> postgres=# INSERT INTO emp VALUES (null, 'aaa');
> INSERT 0 1
> postgres=# INSERT INTO emp VALUES (null, 'bbb');
> INSERT 0 1
> postgres=# INSERT INTO emp VALUES (3, 'ccc');
> INSERT 0 1
> postgres=# INSERT INTO emp VALUES (4, 'ddd');
> INSERT 0 1
> postgres=# SELECT * FROM emp ;
> id | ename
> ----+-------
> | aaa
> | bbb
> 3 | ccc
> 4 | ddd
> (4 rows)
>
> postgres=# SELECT * FROM (SELECT 5::integer id, 'eee'::varchar ename) nr;
> id | ename
> ----+-------
> 5 | eee
> (1 row)
>
> postgres=# INSERT INTO emp SELECT * FROM (SELECT 5::integer id,
> 'eee'::varchar ename) nr WHERE id NOT IN (SELECT id FROM emp);
> INSERT 0 0
> postgres=# SELECT * FROM emp ;
> id | ename
> ----+-------
> | aaa
> | bbb
> 3 | ccc
> 4 | ddd
> (4 rows)
>
> postgres=#
>
>
> The application is generating SQL-Statement to avoid exception while
> inserting
>
> The expected behavior is to INSERT row if the NEW id is not existing in
> table, but this is doing FALSE
>
> Please advise me if am doing something wrong here or any alternate
>
Subjectively, you are allowing an ID field to be NULL. That, for me, is
wrong.
Given this, as a follow-up to what Tom said, you need to decide what you
wish to happen for your NULL IDs. Until you explain that behavior it is
not possible to provide valid alternatives.
Usually you want to use "EXISTS", not "IN"
https://www.postgresql.org/docs/9.6/static/functions-subquery.html#FUNCTIONS-SUBQUERY-EXISTS
Oh, and try adding "WHERE id IS NOT NULL"
David J.
From | Date | Subject | |
---|---|---|---|
Next Message | Andreas Joseph Krogh | 2016-06-29 13:55:50 | Re: Enquiry |
Previous Message | Willy-Bas Loos | 2016-06-29 10:06:42 | Re: cache lookup failed for index |