【问题标题】:Using the derived table in the JOIN statement在 JOIN 语句中使用派生表
【发布时间】:2016-05-27 05:34:12
【问题描述】:

我在 PHP 中有一个类似的数据库查询:

SELECT * FROM ($myQuery) AS myDerivedTable
JOIN ( SELECT COUNT(*) FROM myDerivedTable WHERE criteriaA ) AS A
JOIN ( SELECT COUNT(*) FROM myDerivedTable WHERE criteriaB ) AS B
JOIN ( SELECT COUNT(*) FROM myDerivedTable WHERE criteriaC ) AS C
...

现在,假设$myQuery 包含以下内容:

SELECT * FROM table1 ORDER BY dateOfSubmition DESC

我只想一次又一次地使用派生表(myDerivedTable),而不是每次都计算!但是mySQL报错:

#1146 - Table 'myDB.myDerivedTable' doesn't exist

当然不存在! myDerivedTable,我不是说数据库中存在的表,只是对已经计算好的表的引用!!

我怎样才能达到预期的行为?

【问题讨论】:

    标签: php mysql join derived-table


    【解决方案1】:

    这是另一种使用条件聚合来获取不同条件的计数的方法

    SELECT 
        COUNT(CASE WHEN criteriaA THEN 1 END) AS A
        COUNT(CASE WHEN criteriaB THEN 1 END) AS B
        COUNT(CASE WHEN criteriaC THEN 1 END) AS C
    FROM ($myQuery) AS myDerivedTable
    

    【讨论】:

    • 感谢您的快速回复 :) 但是现在 mySQL 说 #1137 - Can't reopen table: 'myTempTable' ,因为 documentations“您不能在同一查询中多次引用 TEMPORARY 表, " 还有其他解决方法吗?
    • 非常感谢您的关注,您是英雄 :) 是的,对于这个非常具体的案例,我实际上是在寻找一些 "COUNT"s! 和因为您的新方法解决了我的问题,并且我认为我实现该行为的方法可能还很遥远!尽管我认为这不是原始帖子的最终解决方案,但我接受您的帖子作为答案!
    【解决方案2】:
    猜你喜欢
    • 2014-07-23
    • 2021-10-10
    • 2020-12-01
    • 2018-09-21
    • 2017-12-20
    • 2021-08-07
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多