2017-01-19 18 views
1

加入我有下面的查詢問題:查詢左外的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 

我在我試圖做左外出現上述情況的表之間的連接「主」和「training_info 」。

主表:t1和t2之間的內部連接以獲得培訓和類別詳細信息。

training_info(ui):有沒有類別細節的培訓細節。

這裏我有幾個課程的細節在「主要」和「用戶界面」共同表。我在「主」表中沒有「ui」表中的獨特課程記錄。所以我試圖提取獨特和常見的記錄。

我能夠得到這個連接的結果,但問題是與need_dte。在兩個表中都存在need_dte字段。如果記錄來自「主」表,則可以從內部表t2中更新need_dte字段。如果記錄來自結果中的「ui」表,則need_dte未被填充。

是否有任何方式使用此連接設置我需要從training_info表中獲取result_start記錄的need_dte,如果這些記錄有need_dte。

謝謝!

回答

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語法查詢難以閱讀。我認爲以上是你正在尋找的。它從training_info(如果存在)返回need_dte,然後從t2返回。

+0

要麼這樣,要麼OP可能只需要兩列,一個像'main_need_dte'和另一個'training_need_dte'。 (在某些行中可能是'null' - 也許這是行。) – mathguy

+0

謝謝coalesce函數工作:) – user3262279