复杂的SQL查询
问题描述:
我试图让下面的这些规则中的SQL查询:复杂的SQL查询
基本上我有2个父表,A和B. B有一个名为C子表和有一个孩子叫D. 当我从B中选择一个值时,我从C得到了一个记录范围。 这个记录列表指示我从A中拉出什么,然后我需要D中所有与从A拉出的记录相关的信息。
i已经构建了一个查询,从A获取记录,但是在下降到另一个级别时会丢失。
SELECT A.ID
FROM (A
INNER JOIN A2
ON A.IDV = A2.IDV
AND A.Version = A2.CurrentVersion)
LEFT JOIN C ON C.LANGUAGE = A.LANGUAGE
INNER JOIN B ON C.PARENTID = B.ID
WHERE (A2.Enabled = 1)
AND (A.NUMBER = 00596205017)
AND (B.NAME = 'BLAH');
预先感谢
ř
答
表
create table A (AID int)
create table B (BID int, AID int)
create table C (CID int, BID int)
create table D (DID int, AID int)
数据
insert into A values (1),(2),(3)
insert into B values (1, 1),(2, 1),(3, 2),(4, 3)
insert into C values (1, 1),(2, 1),(3, 2),(4, 3)
insert into D values (1, 1),(2, 1),(3, 2),(4, 3)
查询
select D.*
from A as A
inner join D as D
on A.AID = D.AID
where A.AID in (select B.AID
from B as B
inner join C as C
on B.BID = C.BID)
结果
DID AID
----------- -----------
1 1
2 1
3 2
+0
用一点点jiggery我设法让它工作非常感谢! – Roooss 2011-03-29 12:05:05
你已经打破你的问题很好下来。一次只写一步。 B-> C-> A-> d。在每一步之后测试结果集。但是我认为你是在内心深处反其道而行之,这就是为什么你会感到困惑。 – 2011-03-29 11:20:49
斯蒂芬是对的。 SQL的通用表表达式(CTE)是建立这样的查询的一种很好的方式。将每一步都表达为CTE并单独进行测试。然后添加下一步。以后也会更容易理解! – n8wrl 2011-03-29 11:39:13