douxin8610 2016-02-16 04:56
浏览 124
已采纳

在JOIN语句中使用派生表

I have a database query in PHP similar to:

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
...

For now, suppose the $myQuery contains the following:

SELECT * FROM table1 ORDER BY dateOfSubmition DESC

I just want to use the derived table (myDerivedTable) again and again, instead of calculating it every time! But mySQL reports an error:

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

Of course it doesn't exist! By myDerivedTable, I didn't meant to mention an existent table in the database, but just a reference to the already calculated table!!

How may I achieve the desired behavior?

  • 写回答

2条回答 默认 最新

  • dousuo8400 2016-02-16 05:00
    关注

    Here's another way using conditional aggregation to get counts for different criteria

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?