[英]Accessing table from a sub-query inside an inner join - MySql
我有一個 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”
如果有人可以告訴我原因並為我提供可能的解決方案,那將非常有幫助。
我相信你需要這樣的東西
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 中沒有這樣的東西。
根據我的理解,
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
缺乏樣本數據,我們幫助假設。
如果查詢需要更新,請回復我。
評論太長了,所以......
假設您沒有將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
。
最后, AAA
的ON
子句不包含對表AAA
任何引用,因此這實際上不是該表的連接標准。
這是您的查詢有什么問題的答案。 但是,我無法向您展示正確的查詢,因為您完全不清楚您要實現的目標。 請詳細說明。 這可能很簡單,你把事情復雜化了:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.