是否允许从嵌套选择引用外部字段?
E.g。
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在同一个表上使用第二个连接(加入另一行) 最终目标是从同一个表中连接两行,就像这两个表一样 所以我有点将一些相关的行“传播”到一个长行。
答案 0 :(得分: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
左边连接第一行。
答案 1 :(得分:0)
你是说这个吗?
SELECT ...
FROM ext1
LEFT JOIN int2 ON int2.id=ext1.some_id
答案 2 :(得分:0)
这就是ON
子句的用途:
SELECT
FROM ext1
LEFT JOIN int2 AS x ON x.id = ext1.some_id