是否允许从嵌套选择中引用外部字段?
例如。
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/