加入这些CTE的方法是什么?

问题描述 投票:-3回答:1

使用以下SQL代码,我似乎找不到正确加入正在创建的2个CTE以获得正确(或至少是我预期的)记录数的方法。

测试1和测试2只返回每个CTE独立产生的记录; n&m,分别。

我希望能够通过使用TEST 3(LEFT JOIN)或TEST 4(INNER JOIN)检索n条记录,但无论我使用何种类型的连接(我已经尝试过所有的equijoins);我不断获得m记录。


WITH
CTE_ALL_INSPECTIONS AS
(
    SELECT
            InspectorId,
            InspectionetailId
            ...
        FROM ...
        WHERE ...
),

CTE_ALL_INSPECTORS AS
(
    SELECT DISTINCT
            InspectorId,
            COUNT(InspectionDetailId) Inspections
        FROM CTE_ALL_INSPECTIONS
        GROUP BY InspectorId
)

/*
TEST 1:
*/
/*
    SELECT * FROM CTE_ALL_INSPECTORS
*/

/*
TEST 2:
*/
/*
    SELECT * FROM CTE_ALL_INSPECTIONS
*/

/*
TEST 3:
*/
/*
    SELECT
            CTE_ALL_INSPECTIONS.*,
            CTE_ALL_INSPECTORS.Inspections
        FROM
            CTE_ALL_INSPECTORS
            LEFT JOIN CTE_ALL_INSPECTIONS
                ON CTE_ALL_INSPECTIONS.InspectorId = CTE_ALL_INSPECTORS.InspectorId
*/

/*
TEST 4:
*/
/*
    SELECT
            CTE_ALL_INSPECTIONS.*,
            CTE_ALL_INSPECTORS.Inspections
        FROM
            CTE_ALL_INSPECTORS
            INNER JOIN CTE_ALL_INSPECTIONS
                ON CTE_ALL_INSPECTIONS.InspectorId = CTE_ALL_INSPECTORS.InspectorId
*/

我如何获得我想要的记录?或者我怎么能加入这些表?

sql sql-server sql-server-2005
1个回答
1
投票

使用你的测试3,但做...检查你最左边的查询:

SELECT CTE_ALL_INSPECTIONS.*
    , CTE_ALL_INSPECTORS.Inspections 
FROM CTE_ALL_INSPECTIONS
    LEFT JOIN CTE_ALL_INSPECTORS
        ON CTE_ALL_INSPECTIONS.InspectorId = CTE_ALL_INSPECTORS.InspectorId

这说:“给我所有检查,以及检查员存在的任何数量”。

© www.soinside.com 2019 - 2024. All rights reserved.