2016-04-30 2 views
1

Попытка заказать семью по имени отца или, если нет отца, то имя матери, где имена находятся в отдельном «человек» стол, что-то вроде:SQL JOIN на одном поле или другой

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 будет достаточно.

ответ

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.

+0

Большое спасибо; это было правильно. –

0

COALESCE должен работать

ORDER BY COALESCE(NULLIF(b.surname, ''), c.surname), 
      COALESCE(NULLIF(b.given_name, ''), c.given_name) 
Смежные вопросы