2016-02-03 3 views
1

мне нужно создать запрос для Sqlite исходный запрос был как этотпреобразовать правое внешнее соединение, чтобы левое внешнее соединение SQLite

FROM   PhysicianActivity INNER JOIN 
        Activity ON PhysicianActivity.ActivityID = Activity.ID RIGHT OUTER JOIN 
        PhysicianFrequency ON PhysicianActivity.PhysicianID = PhysicianFrequency.PhysicianID AND Activity.LegalEntityID = PhysicianFrequency.LegalEntityID 

зная, что SQLite не поддерживает RIGHT OUTER JOIN так что я застрял с ЛЕВОЙ OUTER JOIN, но я не могу преобразовать этот запрос в LEFT OUTER JOIN

может кто-нибудь помочь?

ответ

1

Большинство людей предпочитает LEFT OUTER JOIN. Ниже равносильна в большинстве случаев:

FROM PhysicianFrequency LEFT JOIN 
     PhysicianActivity 
     ON PhysicianActivity.PhysicianID = PhysicianFrequency.PhysicianID LEFT JOIN 
     Activity 
     ON PhysicianActivity.ActivityID = Activity.ID AND 
     Activity.LegalEntityID = PhysicianFrequency.LegalEntityID 

Я бы рекомендовал использовать псевдонимы таблиц поэтому запрос проще писать и читать:

FROM PhysicianFrequency pf LEFT JOIN 
     PhysicianActivity pa 
     ON pa.PhysicianID = pf.PhysicianID LEFT JOIN 
     Activity a 
     ON pa.ActivityID = a.ID AND 
     a.LegalEntityID = pf.LegalEntityID 
0

По определению right outer join будет возвращать все соответствующие строки и строки из правой таблицы (позиция относительно оператора), которые не имеют соответствия.

Поскольку вы знаете, что вы всегда хотите, чтобы записи из таблицы PhysicianFrequency были всегда доступны, эта таблица должна быть левой таблицей в left outer join.

Таким образом, полное заявление будет выглядеть примерно так:

PhysicianFrequency left join PhysicianActivity 
on PhysicianActivity.PhysicianID = PhysicianFrequency.PhysicianID AND Activity.LegalEntityID = PhysicianFrequency.LegalEntityID 
left join Activity 
on PhysicianActivity.ActivityID = Activity.ID 
Смежные вопросы