如何获取嵌套子查询以识别父查询列

Posted

技术标签:

【中文标题】如何获取嵌套子查询以识别父查询列【英文标题】:How to get a nested sub-query to recognize parent query column 【发布时间】:2011-10-28 14:55:54 【问题描述】:

我有一个问题,我试图计算每个给定 id 的值的总和。我决定使用子查询来做到这一点(通常我会使用连接,但我也为每个子查询保留一个计数器以用于剪辑目的 - see this question 了解更多信息)。为了这个问题,假设我有以下 MySQL 查询:

/* 1.  */  SELECT 
/* 2.  */      t1.experiement_id,
/* 3.  */      (SELECT  sum(x.size) 
/* 4.  */       FROM    (SELECT size, ( @rownum := @rownum + 1 ) AS `rownum`
/* 5.  */                FROM   data AS t0 
/* 6.  */                JOIN ( select @rownum := 0 ) 
/* 7.  */                WHERE  t0.experiment_id = t1.experiment_id
/* 8.  */                ORDER BY size) AS x
/* 9.  */                WHERE x.rownum <= t2.clip_index ) AS `sum`
/* 10. */  
/* 11. */  FROM data      AS t1
/* 12. */  JOIN data_clip AS t2 USING (experiment_id)
/* 13. */  
/* 14. */  GROUP BY t1.experiment_id

问题发生在行 7 上,我试图隔离子查询中与 experiement_id 匹配的行 - 我收到一个错误,即 t1.experiement_id 是未知列。这只发生在嵌套超过 1 级的查询上。就像检查一样,我注意到t2.clip_index 处理得很好。如果我注释掉第 7 行,则查询返回正常(尽管结果错误)。知道如何让子查询识别父表的列以在我的条件下使用吗?谢谢。

【问题讨论】:

我也遇到了同样的问题,你找到解决办法了吗? 【参考方案1】:

您是否尝试过这样的方法来计算行数而不是用户定义的变量?

(SELECT sum(size) FROM  data AS t0                  
WHERE  t0.experiment_id = t1.experiment_id
ORDER BY size HAVING COUNT(*)<=t2.clip_index
) AS `sum` 

让我知道这是否可行,这是我们正在研究的一个有趣的问题。

【讨论】:

以上是关于如何获取嵌套子查询以识别父查询列的主要内容,如果未能解决你的问题,请参考以下文章

使用连接嵌套子查询

聚合查询从嵌套子文档中获取最新元素的计数

Mysql嵌套子查询未知列错误

子查询(嵌套子查询)

关于SQL DELETE嵌套子查询问题

相关子查询 与 嵌套子查询 有何区别 ?