2016-11-26 34 views
1

這是我的示例表,列和記錄...

的Oracle SQL - 連接表包括一列其他(反之亦然)

Table:   tbl1 
     ----------------------- 
Columns: ID | DEPT | WK | MANHRS 
Records: 01 A  1  8 
     02 A  2  2 

Table: tbl2 
-------------------------------- 
Columns: ID | DEPT | WK | WAGES 
Records: 01  A 1  3 
     02  A 2  5 

情景:
我想在兩個表格連接在一起並且MANHRS和WAGES列都結合在結果集中時得到結果。

Expected output of the result table: 
Columns: ID | DEPT | WK | MANHRS | WAGES 
      01 A  1 8   3 
      02 A  2 2   5 


我想聯盟,而且沒有得到我預期的結果。 ?:(
如何做到這一點

+0

提示:'JOIN'。你有什麼問題?你有什麼嘗試? –

+0

我試過聯盟,但沒有得到我預期的結果。 :( – boombox2014

+0

用'JOIN'再試一次並把問題放到問題中(你可以編輯問題) –

回答

1

編寫查詢的正確方法是:

SELECT t1.*, t2.WAGES 
FROM tbl1 t1 JOIN 
    tbl2 t2 
    ON t1.DEPT = t2.DEPT and t1.WK = t2.WK; 

注:

  • 從不FROM條款中使用逗號。 始終使用使用正確的,明確的JOIN語法。
  • 我不確定ID應該在JOIN的條件。
  • 如果您想要兩個表中的所有行,但有些可能會丟失,請使用FULL JOIN

你可以寫與USING子句查詢:

SELECT ID, DEPT, WK, t1.MANHRS, t2.WAGES 
FROM tbl1 t1 JOIN 
    tbl2 t2 
    USING (ID, DEPT, WK); 

此,如果您使用的是FULL JOIN特別有用。

+0

謝謝!我將注意到'正確的連接語法',我在加入時使用逗號,並在where子句中使用了鍵,我還使用了(+)來進行左/右連接,我不知道它爲什麼是不是一個最佳實踐,請問您能否賜教? – boombox2014

+0

@ boombox2014 ......我認爲這個主題的文檔非常清晰:「Oracle建議您使用FROM子句的OUTER JOIN語法而不是Oracle連接運算符。」(https ://docs.oracle.com/database/121/SQLRF/queries006.htm#SQLRF52353) –

0

假設你應該DEPT和WK加入:

SELECT t1.*, t2.WAGES 
FROM tbl1 t1, tbl2 t2 
where t1.DEPT = t2.DEPT and t1.WK = t2.WK 
+0

不要用古老的'JOIN'語法回答一個問題! –