簡體   English   中英

從內部聯接中的子查詢訪問表 - MySql

[英]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

最后, AAAON子句不包含對表AAA任何引用,因此這實際上不是該表的連接標准。

這是您的查詢有什么問題的答案。 但是,我無法向您展示正確的查詢,因為您完全不清楚您要實現的目標。 請詳細說明。 這可能很簡單,你把事情復雜化了:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM