SQL - 基于查询结果的条件连接

时间:2018-05-18 20:30:15

标签: sql oracle join conditional

text = "".join([x for x in root.find('.//Body').itertext()]).strip().replace('\n', '')

表1包含两种类型的帐户,数字帐户和以字母D开头的子帐户。子帐户绑定到table3上的数字帐户,但我需要从表2获取仅包含数字的个人数据帐户。

对于以D开头的记录,我需要一组不同的连接,而不是数字记录。我希望尽可能避免使用工会。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我认为你想要这个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.IDa.OPID = b.ID相同,因此您的逻辑仍然是:

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

也许您过度简化了问题,但如果没有,这实际上可能是最简单的解决方案。

答案 1 :(得分:0)

这是怎么回事?

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%'