Jose, at least two things bothers me about part of your query:
    IfNull('p006', Max(idate))
The first is that 'p006' is never null so the second part of the ifnull() will 
never be used.
The second thing is that the result of this ifnull() is to set the value of the 
"a" field. However, the domain of "a" is 'p001', 'p002',... It is not a date 
which would be returned by Max(idate).
I know you are trying to use side effects, but I don't understand ???
Doug
> -----Original Message-----
> From: sqlite-users <sqlite-users-boun...@mailinglists.sqlite.org>
> On Behalf Of Jose Isaias Cabrera
> Sent: Monday, November 18, 2019 12:11 PM
> To: 'SQLite mailing list' <sqlite-users@mailinglists.sqlite.org>
> Subject: Re: [sqlite] Question about: Adding a record to a table
> with select failure
> 
> 
> Doug, on Monday, November 18, 2019 12:31 PM, wrote...
> Jose Isaias Cabrera
> [clip]
> > > >
> > > > INSERT INTO t (a, b, c, d, e, idate)​
> > > > SELECT IfNull('p006', Max(idate)),​
> > > >        IfNull(b, 1),​
> > > >        IfNull(c, 2),​
> > > >        'y',​
> > > >        IfNull(e, 4),​
> > > >        '2019-20-12'​
> > > >   FROM t​
> > > >  WHERE a = 'p006';​
> >
> > I think that you will never insert the first record with a query
> like this, since
> > the select returns 0 records of there are none in the database
> yet.
> 
> Well, it does...
> sqlite> create table t (a, b, c, d, e, idate, PRIMARY KEY(a,
> idate));
> sqlite> INSERT INTO t
>    ...> SELECT IfNull('p001', Max(idate)),
>    ...>        IfNull(b, 1),
>    ...>        IfNull(c, 2),
>    ...>        IfNull(d,'n'),
>    ...>        IfNull(e, 4),
>    ...>        '2019-20-11'
>    ...>  FROM t
>    ...>  WHERE a = 'p001';
> sqlite> select * from t;
> p001|1|2|n|4|2019-20-11
> sqlite>
> 
> And, since I put an uniqueness on a and idate, now these can not
> be repeated, so if I run the same command again,
> sqlite> INSERT INTO t
>    ...> SELECT IfNull('p001', Max(idate)),
>    ...>        IfNull(b, 1),
>    ...>        IfNull(c, 2),
>    ...>        IfNull(d,'n'),
>    ...>        IfNull(e, 4),
>    ...>        '2019-02-11'
>    ...>  FROM t
>    ...>  WHERE a = 'p001';
> Error: UNIQUE constraint failed: t.a, t.idate
> sqlite>
> 
> I do not get a repeated record for 'p001' and 2019-02-11; But if
> they are different,
> sqlite> INSERT INTO t
>    ...> SELECT IfNull('p002', Max(idate)),
>    ...>        IfNull(b, 1),
>    ...>        IfNull(c, 2),
>    ...>        IfNull(d,'n'),
>    ...>        IfNull(e, 4),
>    ...>        '2019-02-11'
>    ...>  FROM t
>    ...>  WHERE a = 'p002';
> sqlite> select * from t;
> p001|1|2|n|4|2019-02-11
> p002|1|2|n|4|2019-02-11
> 
> It'll work. Thanks.
> 
> josé
> 
> 
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> users

_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to