我看到一些相关帖子试图修改示例以适用于我的案例,但无法做到。
我有3个表:A
,B
和C
,其中包含数百万条记录。
我希望能够:
过滤A
table。
然后,在过滤后的表格上,根据两个表格中的共享列,将其与B
表格连接,再次对其进行过滤。
然后,在过滤后的表上,根据两个表中的共享列将其与C
表连接,进一步过滤
计算c
表上的记录数量。
我尝试的是:
select count(*) from
(select A.exmp_column from A where A.insert_date BETWEEN '2018-03-28 00:10:38' and '2018-03-29 00:10:38') as a,
(select * from B where a.shared_column = B.shared_column) as b,
(select * from C where b.shared_column = C.shared_column) as c;
但似乎我无法在内部选择中使用别名a
和b
。我怎样才能实现我的需要?
如果我的术语不正确,我很抱歉,我是SQL
的新用户。
谢谢
答案 0 :(得分:2)
这是你想要的吗?
select count(*)
from A
inner join B on A.shared_column = B.shared_column
inner join C on B.shared_column = C.shared_column
where A.insert_date BETWEEN '2018-03-28 00:10:38' and '2018-03-29 00:10:38'
答案 1 :(得分:0)
如前所述,您可以为每个需求使用CTE,然后通过加入CTE来组合CTE并获得计数:
;WITH cte_a AS
(select A.exmp_column
FROM A
WHERE A.insert_date BETWEEN '2018-03-28 00:10:38' and '2018-03-29 00:10:38')
, cte_b AS
(select *
FROM B
WHERE a.shared_column = B.shared_column)
, cte_c AS
(select *
FROM C
WHERE b.shared_column = C.shared_column)
SELECT COUNT(c.*)
FROM cte_a a JOIN cte_b b ON a.shared_column = b.shared_column
JOIN cte_c c ON c.shared_column = b.shared_column