是否允许从嵌套选择中引用外部字段?

例如。

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


在这种情况下,这是在嵌套选择中引用ext1.some_id。
在这种情况下,我知道字段ext1.some_id是未知的错误。
可能吗?还有其他方法吗?

更新:

不幸的是,我必须使用嵌套选择,因为我要为其添加更多条件,例如LIMIT 0,1
然后我需要在具有LIMIT 1,1的同一表上使用第二个联接(联接另一行)
最终目标是联接来自同一表的2行,就好像这是两个表一样
因此,我有点想将一些相关的行“散布”成一长行。

最佳答案

最初的问题的答案是:不,删除子查询并将条件放入ON子句中:

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左联接第一行。

关于sql - MYSQL连接-从嵌套选择中引用外部字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3013254/

10-08 23:23