2011-08-18 237 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) –