使用以下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
*/
我如何获得我想要的记录?或者我怎么能加入这些表?
使用你的测试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
这说:“给我所有检查,以及检查员存在的任何数量”。