我有以下查询(为简洁起见已删除),其目的是创建w8用于对结果进行排序的值:
SELECT elements.id, [ ... ],
(SELECT
COALESCE(craft_w8_a.weight, 0) + COALESCE(SUM(craft_w8_b.weight), 0)
FROM `craft_w8` `craft_w8_a`
LEFT JOIN `craft_w8` `craft_w8_b`
ON craft_w8_b.elementId
IN ( SELECT targetId FROM `craft_relations`
WHERE fieldId IN (15, 16)
AND sourceId = elements.id)
WHERE craft_w8_a.elementId = elements.id
) as w8
FROM `craft_elements` `elements`
[ ... ]
GROUP BY `elements`.`id`
ORDER BY `w8` DESC, `name` ASC LIMIT 100
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是第二个嵌套子查询(左连接中的那个)无法elements.id从初始选择中找到该列。
从我发现在 SQL 中搜索只传递一级深度的值,我一直无法找到合适的解决方法。
是否可以强制 SQL 传递比一级更深的值?或者有没有办法修改查询以不使用另一个子查询,但仍然得到相同的结果?
对不起,如果我做任何愚蠢的事情或遗漏了任何明显的东西,SQL 不是我的强项!