> Dominique Devienne <ddevienne at gmail.com> hat am 23. Mai 2016 um 13:42 
> geschrieben:
> 
> 
> On Mon, May 23, 2016 at 12:22 PM, Bernd Lehmkuhl <bernd.lehmkuhl at 
> mailbox.org
> > wrote:
> >
> > > Dominique Devienne <ddevienne at gmail.com> hat am 23. Mai 2016 um 11:20
> > geschrieben:
> > > On Mon, May 23, 2016 at 10:39 AM, Bernd Lehmkuhl <
> > bernd.lehmkuhl at mailbox.org
> > > > [...] What might cause a "constraint failed" message following
> > this command: [...]
> > >
> > > Which version of SQLite? More recent ones tell you which constraint
> > failed,
> > > when they are named, which yours are (a good thing IMHO).
> >
> > Most recent one - 3.12.2. Unfortunately without any name.
> > [...]
> 
> 
> /*** t_geometrie_index ***/
> CREATE VIRTUAL TABLE t_geometrie_index USING rtree(
>   id,
> [...]
> 
> sqlite> INSERT INTO t_geometrie_index (id, xmin, xmax, ymin, ymax)
> >    ...> SELECT
> >    ...>   t.auto_id, [...]
> 
>    ...> FROM
> >    ...>   (
> >    ...>     SELECT
> >    ...>       k.id, [...]
> >    ...>     FROM
> >    ...>       t_geometrie_knoten k
> >    ...>
> >    ...>     UNION ALL <<<<<<
> >    ...>
> >    ...>     SELECT
> >    ...>       p.id, [...]
> >    ...>     FROM
> >    ...>       t_geometrie_punkte p
> >    ...>     GROUP BY
> >    ...>       p.id
> >    ...>   ) sub JOIN t_geometrie_typ t
> >    ...>         ON   sub.id = t.id;
> > Error: constraint failed
> > sqlite> rollback;
> > sqlite> .quit
> >
> 
> OK, was worth a shot. I had a feeling it might be related to the RTREE
> vtables.
> 
> Never used RTREE myself, in SQLite, although I know what this is.
> Could it be your you "knoten" and "punkte" tables have values with the same
> IDs?

Gotcha! Thanks. Even though I claimed having checked that auto_id is unique in 
that query, you just proofed me wrong: 

SELECT 
  auto_id, 
  COUNT(*) 
FROM 
  ( 
  SELECT
    t.auto_id,
    sub.xmin,
    sub.xmax,
    sub.ymin,
    sub.ymax
  FROM
    (
      SELECT
      k.id,
      k.x AS xmin,
      k.x AS xmax,
      k.y AS ymin,
      k.y AS ymax
    FROM
      t_geometrie_knoten k

    UNION ALL

    SELECT
      p.id,
      MIN(p.x),
      MAX(p.x),
      MIN(p.y),
      MAX(p.y)
    FROM
      t_geometrie_punkte p
    GROUP BY
      p.id
    ) sub JOIN t_geometrie_typ t
          ON   sub.id = t.id 
) 
GROUP BY 
  auto_id 
HAVING 
  COUNT(*) > 1 

gives me one auto_id with three occurrences. I should check my data more 
thoroughly, I guess.
Thanks for saving my day :-)

Reply via email to