gpt4 book ai didi

sql - MYSQL join - 从嵌套选择引用外部字段?

转载 作者:行者123 更新时间:2023-11-29 09:18:54 24 4
gpt4 key购买 nike

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

例如

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 join - 从嵌套选择引用外部字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3013254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com