MySQL:在另一个内部选择中访问内部选择表别名

时间:2018-05-22 13:21:24

标签: mysql sql

我看到一些相关帖子试图修改示例以适用于我的案例,但无法做到。

我有3个表:ABC,其中包含数百万条记录。

我希望能够:

  1. 过滤A table。

  2. 的部分记录
  3. 然后,在过滤后的表格上,根据两个表格中的共享列,将其与B表格连接,再次对其进行过滤。

  4. 然后,在过滤后的表上,根据两个表中的共享列将其与C表连接,进一步过滤

  5. 计算c表上的记录数量。

  6. 我尝试的是:

    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;
    

    但似乎我无法在内部选择中使用别名ab。我怎样才能实现我的需要?

    如果我的术语不正确,我很抱歉,我是SQL的新用户。 谢谢

2 个答案:

答案 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