簡體   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