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