如何在mysql中最内部子查询where子句中使用外表列?

时间:2016-08-18 11:34:34

标签: mysql

我有一个MySQL查询,我需要运行一个子查询,进一步运行这样的子查询:

SELECT id, 
    (SELECT COUNT(*) AS total FROM 
        (SELECT * FROM t3 WHERE t3.abcId = t1.id) t2 
     WHERE /*conditions*/) as total 
FROM t1 WHERE /* condtions */;

现在此查询引发错误unknown column t1.id.请允许任何人告诉如何在最内部子查询t1 table子句中使用where列。我还试图通过@variables传递t1列值,如下所示:

SELECT id, @var := t1.id,  
    (SELECT COUNT(*) AS total FROM 
        (SELECT * FROM t3 WHERE t3.abcId = @var) t2 
     WHERE /*conditions*/) as total 
FROM t1 WHERE /* conditions */;

但是在这种情况下@var没有为每一行更新,即total返回与第一行相同的值。请为此建议任何有效的解决方案。

注意: - 我无法更新查询流,因为它计算的内容非常复杂。上述查询只是原始查询流程的一个示例。

2 个答案:

答案 0 :(得分:1)

不能这样做,如果外部查询超过1级,SQL引擎就不允许使用外部查询。我可以建议一个替代方案,避免其中一个子选择:

SELECT t1.id ,
       (SELECT COUNT(*) FROM t3 
        WHERE t3.abcID = t1.id 
          AND /*conditions */) as total
FROM t1
WHERE /*conditions */

答案 1 :(得分:0)

最里面的查询可以是 从t3,t1中选择COLUMN_NAMES,其中t3.abcid == t1.id