我有一个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返回与第一行相同的值。请为此建议任何有效的解决方案。
注意: - 我无法更新查询流,因为它计算的内容非常复杂。上述查询只是原始查询流程的一个示例。
答案 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