[英]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.