SQL JOIN在一个字段或另一个字段上

时间:2016-04-30 18:15:08

标签: sql sqlite

试图按父亲的名义订购一个家庭,或者,如果没有父亲,则按母亲的名字命名,其名称在一个单独的人物中#34;表,如:

SELECT DISTINCT family.myid FROM family 
   JOIN person 
   ON family.father_id = person.myid OR
   family.mother_id = person.myid
   ORDER BY person.surname, 
            person.given_name;

在这个版本中,没有父亲的家庭最终未被排除在底部。希望没有父亲的家庭以母亲的名义出现在秩序中。 Sqlite SQL就足够了。

2 个答案:

答案 0 :(得分:3)

基本上,你需要为父亲和母亲单独加入:

select f.*
from family f left join
     person d
     on f.father_id = d.myid left join
     person m
     on f.mother_id = m.myid
order by (case when d.myid is null then m.surname else d.surname end),
         (case when d.myid is null then m.given_name else d.given_name end);

由于可能缺少某个值,因此该值应为left join

答案 1 :(得分:0)

COALESCE应该工作

   ORDER BY COALESCE(NULLIF(b.surname, ''), c.surname),
            COALESCE(NULLIF(b.given_name, ''), c.given_name)