2

我有 3 张桌子:

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

我想过滤所有满足 C.k2 条件的 A 。在此示例中,我必须通过表 B 过滤:过滤具有相同 k1 属性的所有 B 与 A ,并过滤所有 C 与 B 的 k2 属性(我之前已过滤)。

我有一个丑陋的方法来做到这一点:

select * from A where k1 in (select * .....)// 它看起来丑陋且难以追踪

我虽然有关于使用join功能,但真的不知道如何做到这一点。请告诉我此查询的最佳方法。

谢谢 :)

4

4 回答 4

7

试试这个查询。

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

JOIN的解释

在此处输入图像描述

于 2013-05-29T04:07:02.940 回答
1

听起来很简单:

select * from A
join B on B.k1 = A.k1
join C on C.k2 = B.k2
于 2013-05-29T04:04:58.123 回答
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'
于 2013-05-29T04:05:14.983 回答
1

使用连接从两个或多个表中检索数据。请参阅加入基础

SELECT A.k1,B.k2 
FROM A 
JOIN B ON A.k1 = B.k1 
JOIN C ON B.k2 = C.k2
于 2013-05-29T04:13:46.320 回答