2011-08-18 177 views
1

這裏的情況,我有3個看起來像這樣的表。我可以做多個SQL請求作爲一個請求

table foo 
type number 
a 1 
b 2 
c 3 
d 4 

table bar 
number shape 
1  square 
2  circle 
3  triangle 
4  rectangle 

table foobar 
shape  colour 
square red 
circle green 
triangle blue 
rectangle yellow 
triangle purple 

他們都有獨特的ID,我沒有列出。
我有類型,但我想找到顏色。現在我可以做三個SQL請求來獲取它,但是由於SQL可能是瓶頸,所以我想知道是否可以將三個SQL請求合併爲一個請求。

是否有可能做到這一點,將它跑得比三個獨立的SQL請求

1將返回紅色和3將返回藍色和紫色。

+0

你能告訴我們你想要輸出的例子嗎? –

+0

也許如果你解釋你想要做的3個請求,將更容易回答你的問題。 – Johanna

回答

5
SELECT fb.colour 
FROM foo AS f 
INNER JOIN bar AS b ON f.number = b.number 
INNER JOIN foobar AS fb ON b.shape = fb.shape 
WHERE f.type = "YOURTYPE" 

您可以使用JOINS來加入行並使用where子句來指定所需的類型。它肯定會更快然後做這樣的:

SELECT number FROM foo WHERE type="YOURTYPE" 
SELECT shape FROM bar WHERE number="NUMBERRETRIEVEDFROM" 
SELECT colour FROM foobar WHERE shape="SHAPE" 
1

嘗試是這樣的:

SELECT C.colour 
FROM foo AS A, bar AS B, foobar AS C 
WHERE A.number = B.number 
AND B.shape = C.shape 
WHERE A.type = '<YOUR-TYPE>' 
+0

這是您應該使用JOIN的笛卡爾產品(postgres自動修復此問題,但不要依賴於其他dbms) –