从内部join中的子查询访问表-mysql

fkaflof6  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(281)

我有一个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”
如果有人能告诉我原因并给我一个可能的解决方案,那将非常有帮助。

bakd9h0s

bakd9h0s1#

据我所知,

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

由于缺乏样本数据,我们假设。
如果查询需要更新,请回复我。

jhkqcmku

jhkqcmku2#

我相信你需要这样的东西

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的join子查询中不可能引用外部别名。在postgresql中,您可以使用 CROSS JOIN LATERAL 在sql server中 CROSS APPLY 但是,mysql中没有这样的东西。

mrphzbgm

mrphzbgm3#

评论太长了,所以。。。
假设您没有在 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 select不包含 aid ,只有一个 bid 和一个 bname .
最后 ON 条款 AAA 不包含对表的任何引用 AAA ,因此这实际上不是该表的联接条件。
这就是你问题的答案。不过,我无法向您展示正确的查询,因为您试图实现的目标完全不清楚。请详细说明。这可能很简单,你把事情复杂化了:-)

相关问题