从内部联接内的子查询访问表-MySQL

时间:2018-09-04 12:37:39

标签: mysql sql

我正在执行如下SQL查询-

select 
* 
from A
inner join AA on A.id = AA.aid
inner join AAA on 
(
  select B.bid, B.bname 
  from B
  inner join C on B.id = C.bid
  where C.aaid = AA.id
) as B1 on A.id = B1.aid

哪个出错了

  

“ where子句”中的未知列“ AA.id”

如果有人可以告诉我原因并提供可能的解决方案,这将非常有帮助。

3 个答案:

答案 0 :(得分:1)

我相信您需要这样的东西

select 
* 
from A
inner join AA on A.id = AA.aid
inner join AAA on AA.id = AAA.aid 
inner join
(
  select B.bid, B.bname, C.aaid
  from B
  inner join C on B.id = C.bid
) as B1 on A.id = B1.aid and AA.id = B1.aaid

在MySQL的联接子查询中无法引用外部别名。在PostgreSQL中,可以使用CROSS JOIN LATERAL;在SQL Server CROSS APPLY中,可以使用MySQL。

答案 1 :(得分:0)

据我了解

select 
* 
from #a1 a1 --A
inner join #a2 a2 on a1.i = A2.i --AA
inner join #a3 a3 on a1.i = a3.i --AAA
inner join
(
  select B.i, a2.i ai
  from #b b --B
  inner join #c c on B.i = C.i --C
  inner join #a2 a2 on a2.i = C.i  --AA
) as B1 
on A1.i = B1.i
and B1.ai = a2.i

样本数据不足,我们可以作为假设。

如果查询需要更新,请回复我。

答案 2 :(得分:0)

这个评论太长了,所以...

假设您没有将FROM子句中的子查询作为即席视图编写,而是使其成为显式视图B1(带有CREATE VIEW)。然后您的查询将显示为

select * 
from A
inner join AA on A.id = AA.aid
inner join AAA on B1 on A.id = B1.aid

这说明您的语法已关闭。

此外,B1选择项不包含aid,仅包含bidbname

最后,ON的{​​{1}}子句不包含对表AAA的任何引用,因此,这实际上不是该表的联接条件。

这是查询问题的答案。不过,我无法向您显示正确的查询,因为目前尚不清楚您要实现的目标。请详细说明。这可能非常简单,并且您使事情变得过于复杂:-)