2017-08-12 41 views
1

有人可以幫助我使用這些條件使SQL(ORACLE)查詢更靈活嗎?如何僅使用JOIN顯示匹配的項目

有2個表:

表1

CodeA  Year 

1112-999 2017 
1113-999 2017 

表2

CodeB  Year 

1114-111 2017 
1115-111 2018 

然後運行該腳本

SELECT aa.CodeA, bb.CodeB FROM Table 1 aa 
JOIN Table 2 bb ON aa.Year = bb.Year 
AND REGEXP_LIKE (aa.CodeA, '^111+2'); 

在這種情況下,結果是:

CodeA  CodeB 

1112-999 1114-111 

但在這種情況下,它需要顯示只有第一個值和另一列應該是正在運行的腳本後空。

例如,

CodeA  CodeB 

1112-999 NULL 

但是,如果列 「CodeB」(表2)含有值= 1112-534,則該值應在運行相同的腳本

對於後出現例如,

表1

CodeA  Year 

1112-999 2017 
1113-999 2017 

表2

CodeB  Year 

1114-111 2017 
1112-534 2017 
1115-111 2018 

並運行相同的腳本後,結果應該是:

CodeA  CodeB 

1112-999 1112-534 

我應該在這個腳本,以便改變根據表格中的輸入數據使其變得靈活(通用)?我的意思是,當表2中不包含的預期值(在這種情況下1112-534),然後將結果(第2列)應爲NULL:

CodeA  CodeB 

1112-999 NULL 

,並在表2中包含這個值( 1112-534),則反應應該是:

CodeA  CodeB 

1112-999 1112-534 

這裏是劇本我已經和要使它更加靈活:

SELECT aa.CodeA, bb.CodeB FROM Table 1 aa 
JOIN Table 2 bb ON aa.Year = bb.Year 
AND REGEXP_LIKE (aa.CodeA, '^111+2'); 

請幫我)))提前致謝。

+1

請粘貼來自SQL * plus的純文本,而不是粘貼在stackoverflow上的HTML。簡單的'DESCRIBE table'輸出將比您發佈的

更有幫助。 –

回答

0

您可能會發現它的幫助,查看過濾前加入的結果:

SELECT aa.CodeA, bb.CodeB FROM Table1 aa 
JOIN Table2 bb ON aa.Year = bb.Year; 

你的英語語言規範不是很清楚,但會暗示你想要NULL過濾:

SELECT aa.CodeA, bb.CodeB FROM Table1 aa 
JOIN Table2 bb ON aa.Year = bb.Year 
WHERE REGEXP_LIKE(aa.CodeA, '^1+2') 
and bb.CodeB is not null; 

另請參閱https://en.wikipedia.org/wiki/Join_(SQL)

+0

剛編輯它。對不起,這麼醜陋的描述。我的第一個問題使用表格。我認爲這張表會自動編輯。我也更新了描述。你能否再次審查一下。我試圖更清楚地表達我的想法))) – Vladimir

+0

請查看已記錄的JOIN變體,特別是https://en.wikipedia.org/wiki/Join_(SQL)#Outer_join左外連接,然後查看您的JOIN沒有WHERE子句的正則表達式過濾。發佈看起來有希望的任何JOIN結果。首先,您需要確定適當的JOIN關係,然後才能將其過濾到相關的行。 –

+0

謝謝。我認爲左外連接將解決我的問題。 – Vladimir

相關問題