加入这些CTE的方式是什么?
What would be the way to join these CTEs?
处理以下 SQL 代码时,我似乎无法找到正确加入正在创建的 2 个 CTE 以获得正确(或至少是我预期的)记录数的方法。
TEST 1 & TEST 2只是return每个CTE独立制作的记录; n & m.
我希望能够通过使用测试 3(左连接)或测试 4( INNER JOIN)但是,无论我使用什么类型的连接(并且我已经尝试了所有等值连接);我不断收到 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,但将 ...Inspections 设为最左边的查询:
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
这表示,"give me all the inspections, as well as any counts from Inspectors that exist"。
处理以下 SQL 代码时,我似乎无法找到正确加入正在创建的 2 个 CTE 以获得正确(或至少是我预期的)记录数的方法。
TEST 1 & TEST 2只是return每个CTE独立制作的记录; n & m.
我希望能够通过使用测试 3(左连接)或测试 4( INNER JOIN)但是,无论我使用什么类型的连接(并且我已经尝试了所有等值连接);我不断收到 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,但将 ...Inspections 设为最左边的查询:
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
这表示,"give me all the inspections, as well as any counts from Inspectors that exist"。