繁体   English   中英

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

[英]query with left outer join in sql

我对以下查询有疑问:

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):有没有类别细节的训练细节。

在这里,我在“main”和“ui”表中几乎没有共同的课程细节。 而且我在“主”表中没有在“ui”表中的独特课程记录很少。 所以我试图提取唯一和常见的记录。

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

有什么方法可以使用此连接设置,如果这些记录有need_dte,我还需要从training_info 表中获取结果记录的need_dte。

谢谢!

这是你想要的吗?

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语法的查询难以阅读。 我认为以上就是你要找的。 它从training_info返回need_dte (如果存在),然后从t2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM