SQL - условные объединения на основе результатов в запросе - PullRequest
0 голосов
/ 18 мая 2018
Select a.OPID, b.Name, b.Dept
from table1 a, table2 b, table3 c
where
(CASE 
WHEN a.OPID like 'D%'
THEN a.OPID = c.OPID and c.OPID = b.ID
ELSE a.OPID = b.ID
END);

Таблица 1 содержит два типа учетных записей: числовые и вспомогательные учетные записи, начинающиеся с буквы D. Эти вспомогательные учетные записи привязаны к числовой учетной записи в таблице 3, но мне нужно удалить личные данные из таблицы 2, котораяимеет только числовые учетные записи.

Мне нужен другой набор объединений для записей, начинающихся с D, чем для числовых записей.Я хочу избежать использования союзов, если это возможно.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я думаю, вам нужна логика JOIN:

Select a.OPID, b.Name, b.Dept
from table1 a left join
     table3 c
     on a.OPID = c.OPID and a.OPID like 'D%' left join
     table2 b
     on (b.ID = c.OPID and a.OPID like 'D%') or
        (b.ID = a.OPID and a.OPID not like 'D%');

Возможно, вы упростили проблему.Но логика a.OPID = c.OPID and c.OPID = b.ID такая же, как и a.OPID = b.ID, поэтому ваша логика по-прежнему:

Select a.OPID, b.Name, b.Dept
from table1 a join
     table2 b
     on b.ID = a.OPID;

Возможно, вы упростили задачу, но если нет, то это может быть простейшим решением.

0 голосов
/ 18 мая 2018

Как это?

select  a.OPID, b.Name, b.Dept from table1 a join table2 b
    on a.OPID = b.ID
    Where a.OPID like 'D%'
    union 
    select  a.OPID, b.Name, b.Dept from table1 a join table3 b
    on a.OPID = b.ID
    WHEre a.OPID not like 'D%'
...