請查看下面的SQLFiddle鏈接中的SQL。SQL幫助,左加入過濾器
http://sqlfiddle.com/#!9/22e094/4
我的目標是從表1得到所有的記錄,如果SecId表2中存在,只能加入,如果狀態爲「Y」。
的結果應該是,它從表1拉:ID 1和2,而對於ID 1,它成功地離開了加入表2和拉「Y」
正如你可以在小提琴看到,我試過3種不同方式,但似乎無法得到它。
它讓我難住...幫助將是太棒了! :)
請查看下面的SQLFiddle鏈接中的SQL。SQL幫助,左加入過濾器
http://sqlfiddle.com/#!9/22e094/4
我的目標是從表1得到所有的記錄,如果SecId表2中存在,只能加入,如果狀態爲「Y」。
的結果應該是,它從表1拉:ID 1和2,而對於ID 1,它成功地離開了加入表2和拉「Y」
正如你可以在小提琴看到,我試過3種不同方式,但似乎無法得到它。
它讓我難住...幫助將是太棒了! :)
左連接,只有在ON
子句中的連接條件,很好。
但是,你說你要保持行,其中status
是'Y'
只有當存在於table2
的secid
。所以這意味着你也想保留secid
table2
爲NULL
的行。
select *
將不會飛行,因爲在兩個表中都有相同名稱的列secid
。如果需要在where
子句或查詢中的任何其他位置引用它們來區分它們(通過給它們別名 - 或至少其中之一;我給它們兩個別名)以打破歧義。而且,由於只能在SELECT
子句中給出別名,該子句在WHERE
子句之後進行求值,因此需要在子查詢中執行左連接。
select id, secid_a, secid_b, status
from (
select a.id, a.secid as secid_a, b.secid as secid_b, b.status
from table1 a left join table2 b
on a.secid = b.secid
)
where status = 'Y' or secid_b is null;
如果是Oracle,爲什麼把它標記爲MySQL? – Niagaradad
請以表格形式發佈預期結果,因爲您的描述不清楚 – BobC
@Niagaradad我在SQLFiddle中遇到了Oracle選項問題 – Gvdk