在sql中使用左外连接进行查询

时间:2017-01-19 17:47:54

标签: sql oracle join

我遇到以下问题的问题:

select main.courseid
    ,main.coursename
    ,main.catid
    ,main.catname
    ,main.need_dte
from (
    select t1.courseid
        ,t1.coursename
        ,t2.catid
        ,t2
        ,catname
        ,t2.need_dte
    from t1
        ,t2
    where t1.courseid = t2.courseid
        and t1.coursename = t2.coursename
    ) main
left outer join (
    select courseid
        ,coursename
        ,need_dte training_info
    ) ui on main.courseid = ui.courseid
    and main.coursename = ui.coursename
    and main.need_dte = ui.need_dte

我有上面的场景,我试图在表“main”和“training_info”之间进行左外连接。

主表:t1和t2之间的内部联接,以获得培训和类别详细信息。

training_info(ui):提供没有类别详细信息的培训详细信息。

这里我在“主要”和“ui”表中共有很少的课程细节。我在“主”表中没有很少的独特课程记录,而不是在“ui”表中。所以我试图提取独特和常见的记录。

我能够获得此联接的结果,但问题在于need_dte。 need_dte字段存在于两个表中。在结果中,如果记录来自“主”表,则能够从内部表t2获得更新的need_dte字段。如果记录来自结果中的“ui”表,则不会填充need_dte。

有没有办法使用这个连接设置我需要从training_info表获取结果记录的need_dte,如果这些记录有need_dte。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

select t1.courseid, t1.coursename, t2.catid, t2.catname,
       coalesce(ti.need_dte, t2.need_dte ) as need_dte
from t1 join
     t2 
     on t1.courseid = t2.courseid and
        t1.coursename = t2.coursename left outer join
     training_info ti
     on t1.courseid = ti.courseid and
        t1.coursename = ti.coursename and
        t2.need_dte = ti.need_dte;

我发现您的查询包含嵌套子查询,多级命名和古老join语法难以阅读。我认为以上就是你要找的。它会从need_dte返回training_info(如果存在),然后从t2返回。