2010-06-10 80 views
0

是否允許從嵌套選擇引用外部字段?MYSQL連接 - 從嵌套選擇引用外部字段?

E.g.

SELECT 
FROM ext1 
LEFT JOIN (SELECT * FROM int2 WHERE int2.id = ext1.some_id) as x ON 1=1 

在這種情況下,這是在嵌套select中引用ext1.some_id。 在這種情況下,我收到錯誤字段ext1.some_id是未知的。 這可能嗎?有沒有其他的方法?

UPDATE:

不幸的是,我不得不使用嵌套的選擇,因爲我要添加更多條件吧,比如限制0,1 ,然後我需要使用一個在同一個表第二個連接與LIMIT 1,1(加入另一行) 最終的目標是從同一個表中連接2行,就好像這些是兩個表 所以我很想將一些相關行「傳播」到一個長行中。

回答

2

回答你最初的問題是:沒有,刪除您的子查詢,並把情況向ON -clause:

SELECT * 
FROM ext1 
LEFT JOIN int2 ON (int2.id = ext1.some_id) 

一種解決方案可能是使用變量來找到第一(或第二)行,但這種解決方案不能有效地處理索引,所以你最終可能會遇到性能問題。

SELECT ext1.some_id, int2x.order_col, int2x.something_else 
FROM ext1 
LEFT JOIN (SELECT `int2`.*, @i:=IF(@id=(@id:=id), @i+1, 0) As rank 
      FROM `int2`, 
      (SELECT @i:=0, @id:=-1) v 
       ORDER BY id, order_col) AS int2x ON ( int2x.id = ext1.some_id 
                  AND int2x.rank = 0) 
; 

這是假設你有你想要(order_col)命令和左每some_id加入第一行一列。

+0

不幸的是,我不得不使用嵌套的選擇,因爲我要添加更多條件吧,比如限制0,1 然後我需要在LIMIT 1,1 的同一張表上使用第二次連接。最終目標是從同一個表中連接2行,就好像這些表是兩個表一樣 – AlexA 2010-06-10 09:46:02

0

你的意思是?

SELECT ... 
FROM ext1 
LEFT JOIN int2 ON int2.id=ext1.some_id 
0

這就是ON條款是什麼:

SELECT 
FROM ext1 
LEFT JOIN int2 AS x ON x.id = ext1.some_id