查询交叉表的好方法

时间:2013-05-29 04:00:01

标签: sql

我有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函数,但不知道如何做到这一点。请告诉我这个查询的最佳方法。

谢谢:)

4 个答案:

答案 0 :(得分: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)

听起来很简单:

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

答案 2 :(得分:1)

如果我正确地读取你的表结构,那么连接逻辑将是这样的:

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

当然,您可以在SELECT中指定您想要值的表,即:

SELECT A.*,C.*

或使用WHERE限制结果,即:

WHERE C.C = 'something'

答案 3 :(得分:1)

使用join从两个或多个表中检索数据。见Join Fundamentals

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