【问题标题】:mysql howto access temporary table generated by subquery in another subquery?mysql如何在另一个子查询中访问子查询生成的临时表?
【发布时间】:2014-01-08 10:19:57
【问题描述】:

我试过这个:

    SELECT ProductId AS GmId, (
    SELECT SUM(Amount) FROM tmp WHERE ProductId=GmId AND (AssignDate BETWEEN '$Date1' AND '$Date2')
) AS sum0, (
    SELECT SUM(Amount) FROM tmp WHERE ProductId=GmId AND (AssignDate BETWEEN '$Date2' AND '$Date3')
) AS sum1 FROM (
    SELECT * FROM somerealtable
) tmp GROUP BY ProductId

但是mysql显示错误信息table <database name>.tmp doesn't exist!

如何做到这一点?

编辑:sqlfiddle 示例here

EDIT2:更复杂的 sqlfiddle sample

【问题讨论】:

  • 考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集
  • 临时表虽然没有在您的问题中显示(它们在哪里?),但它们是每个会话的,并且不能跨会话访问,换句话说A TEMPORARY table is visible only to the current connection

标签: mysql sql select group-by subquery


【解决方案1】:

无需使用子查询。你可以用 JOIN

做同样的事情

试试这个:

SELECT a.ProductId AS GmId, 
       SUM(IF(b.AssignDate BETWEEN '$Date1' AND '$Date2', b.Amount, 0)) AS sum0, 
       SUM(IF(b.AssignDate BETWEEN '$Date2' AND '$Date3', b.Amount, 0)) AS sum1
FROM somerealtable a
LEFT JOIN tmp b ON a.ProductId=b.GmId 
GROUP BY ProductId

【讨论】:

  • SUM(IF(b.AssignDate BETWEEN '$Date1' AND '$Date2', b.Amount, 0)) - 这是一个不错的技巧。不知道IF 可以做到这一点。按预期显示结果。谢谢。
猜你喜欢
  • 2012-12-15
  • 2018-08-03
  • 2013-02-07
  • 2013-02-27
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多