2013-05-29 121 views
2

很好的方式,我有3個表:來查詢交叉表

A(k1,A)B(k1,k2,B)C(k2,C)

我想篩選滿足C.k2條件的所有A.在這個例子中,我必須過濾表B:過濾與A具有相同k1屬性的所有B,並用B過濾所有C k2屬性(之前已經過濾)。

我有一個醜陋的方式做到這一點:

select * from A where k1 in (select * .....) //它看起來醜陋,很難追查

我雖然關於使用join功能,但真的不知道如何做到這一點。請告訴我一個這個查詢的最佳方法。

謝謝:)

+2

你可以發表你的表的結構嗎?沒有得到你的語言 –

+0

你的「醜陋」的方法可以確保你不會得到重複的'A'行,你可以通過一個連接獲得,除非你做了'select distinct a。* ...'' –

回答

7

嘗試此查詢。

select * from A 
join b on a.k1 = b.k1 
join c on c.k2 = b.k2 

Explanation for JOIN

enter image description here

+1

+1:好的圖 –

1

這聽起來很簡單:

select * from A 
join B on B.k1 = A.k1 
join C on C.k2 = B.k2 
1

如果我正確地讀你的表結構中,連接邏輯是這樣的:

SELECT * 
FROM A 
JOIN B 
    ON A.k1 = B.k1 
JOIN C 
    ON B.k2 = C.k2 

你可以當然然後在選擇指定您希望從,即值的表:

SELECT A.*,C.* 

或限制的結果與WHERE即:

WHERE C.C = 'something' 
1

使用連接到來自兩個或多個表中檢索數據。見Join Fundamentals

SELECT A.k1,B.k2 
FROM A 
JOIN B ON A.k1 = B.k1 
JOIN C ON B.k2 = C.k2