Definitely a bug: I distilled the OP's code into an easy repeatable test
case -
-------------------------------------------------------
create table t(id integer primary key autoincrement, a, b, c);
insert into t values
(3,1 ,'name' ,'Imogen')
,(5,1 ,'gender' ,'female')
,(6,1 ,'son' ,'Guiderius')
,(7,1 ,'son' ,'Arvirargus');
select distinct t.*
from t
join t as t1 on t.a=t1.a and t1.a = 1
where t.b = 'name'
union
select distinct t.*
from t
join t as t1 on t.a=t1.a and t1.a = 1
where t.b = 'gender'
order by t.id
-- Expected
-- id | a | b | c
-- --- | --- | -------- | --------
-- 3 | 1 | name | Imogen
-- 5 | 1 | gender | female
-- Returned
-- id | a | b | c
-- --- | --- | -------- | --------
-- 3 | 1 | name | Imogen
-- 5 | 1 | gender | female
-- 5 | 1 | 1 | female
drop table t;
-----------------------------------------------------------
If you change almost anything, it works. Remove the "t.a=t1.a and" from
the first select, and it works.
Remove the order clause and it works.
Cheers,
Ryan
On 2016/02/08 11:12 PM, Poor Yorick wrote:
> The following query produces a third phantom record on my system:
>
>
> ===== start script =====
> package require sqlite3
>
> sqlite3 [namespace current]::db :memory:
>
> db eval {
> create table if not exists eav (
> id integer primary key autoincrement
> ,entity numeric
> ,attribute text
> ,value
> )
> ; insert into eav values
> (3 ,1 ,'name' ,'Imogen')
> ,(5 ,1 ,'gender' ,'female')
> ,(6,1 ,'son' ,'Guiderius')
> ,(7,1 ,'son' ,'Arvirargus')
> }
>
> set pattern0 1
> set report2 name
> set report3 gender
>
> puts [db eval {
> select distinct eav.* from eav
> join eav as eav0 on eav.entity == eav0.entity
> and eav0.entity == :pattern0 where eav.attribute == :report2
> union
> select distinct eav.* from eav
> join eav as eav0 on eav.entity == eav0.entity
> and eav0.entity == :pattern0 where eav.attribute == :report3
> order by eav.id
> }]
> ===== end script =====
>
> The result is:
>
> 3 1 name Imogen 5 1 gender female 5 1 1 female
>