2016-12-07 25 views
1

得到所有記錄這是我的許多一對多表:許多一對多 - 從相關的記錄

Table3: 

ID_TABLE3 
ID_TABLE1_FK 
ID_TABLE2_FK 
Some_Field 

現在我想在這裏ID_TABLE1_FKTABLE3 = 3做一個選擇的所有記錄TABLE2 。這是我的查詢,它會返回所有記錄,但它會在末尾添加TABLE3的所有字段 - 哪些是不需要的! :

SELECT * from TABLE2 
JOIN TABLE3 ON TABLE3.ID_TABLE2_FK = TABLE2.ID_TABLE2 
WHERE TABLE3.ID_TABLE1_FK= 3 

那麼我錯在哪裏?

+0

@GordonLinoff,完成,感謝您的通知。 – LuckyLuke82

+0

@a_horse_with_no_name,oracle。但是線程解決了。 – LuckyLuke82

回答

3

只需使用常規的JOIN並選擇您真正想要的列;

SELECT t2.* 
FROM TABLE2 t2 JOIN 
    TABLE3 t3 
    ON t3.ID_TABLE2_FK = t2.ID_TABLE2 
WHERE t3.ID_TABLE1_FK = 3; 

這可能會產生重複(如果它們在TABLE3)。所以,你可能會更好:

SELECT t2.* 
FROM TABLE2 t2 
WHERE EXISTS (SELECT 1 
       FROM TABLE3 t3 
       WHERE t3.ID_TABLE2_FK = t2.ID_TABLE2 AND t3.ID_TABLE1_FK = 3 
      ); 
+0

DISTINCT可以幫助重複嗎? 我沒有測試過查詢,但我想這樣的事情可能會做這項工作,而無需添加另一個選擇: SELECT DISTINCT t2。* FROM ... – Jacopo

+0

@Gordon Linoff,謝謝。我測試了他們和他們的工作。但我需要一點解釋......我已經做了一個簡單的JOIN,就像你在發佈之前做的那樣,輸出是一樣的。你的建議只有在這裏有所不同「SELECT t2。*」 - 我所做的只是「SELECT * from」。這是一個錯誤還是什麼?...看看我編輯的查詢問題,你會看到那裏。 – LuckyLuke82

+0

@Jacopo,問題只是在我的相關記錄旁邊還有多對多字段顯示在結果中。 – LuckyLuke82