【问题标题】:Combine 2 queries with LEFT JOIN and 3 tables将 2 个查询与 LEFT JOIN 和 3 个表结合起来
【发布时间】:2020-08-18 13:28:21
【问题描述】:

First Left JOIN 与 2 个表(project_reviews 和 project_review_remarks)

SELECT pr.review_id,client_name,improvement_areas, strengths
FROM project_reviews pr
LEFT JOIN project_review_remarks pra ON pr.review_id = pra.review_id
WHERE review_status IN ('COMPLETED') 
ORDER BY review_date DESC;

第二个左 JOIN 与 2 个表(project_reviews 和 project_review_remarks)

SELECT pr.review_id, COUNT(pra.action_item_id) AS actions
FROM project_reviews pr
LEFT JOIN project_review_action_item pra ON pr.review_id = pra.review_id
GROUP BY pr.review_id;

在这两个查询中,project_reviews 是一个公用表,

IN 第一个查询是 ONE-ONE 关系 在第二个查询是一对多关系(我在哪里使用 group by 计算了很多行)

我想将两个查询合并到一个查询中,因为 project_reviews 是一个带有评论 ID 的公共表,并将 action_item 的计数显示到一个表中。

【问题讨论】:

    标签: sql-server left-join


    【解决方案1】:

    只需将这些代码添加到第一个查询。

    • 在选择中添加COUNT(pra.action_item_id) AS actions
    • 添加LEFT JOIN project_review_action_item pra ON pr.review_id = pra.review_id。确保您的两个LEFT JOIN tables 具有不同的alias,因为我已更新project_review_remarksprr
    • 添加GROUP BY 以及来自SELECT 的所有columns,例如GROUP BY pr.review_id, client_name, improvement_areas, strengths
    • GROUP BYTEXT 列,您可以将其转换为 VARCHAR(MAX)NVARCHAR(MAX),无论您认为合适。

    检查下面的完整查询。

    SELECT  pr.review_id, 
            client_name, 
            CAST(improvement_areas AS VARCHAR(MAX)) AS improvement_areas, 
            CAST(strengths AS VARCHAR(MAX)) AS strengths, 
            COUNT(pra.action_item_id) AS actions
    FROM project_reviews pr
    LEFT JOIN project_review_remarks prr
        ON pr.review_id = prr.review_id
    LEFT JOIN project_review_action_item pra
        ON pr.review_id = pra.review_id
    WHERE pr.review_status IN ('COMPLETED')
    GROUP BY pr.review_id, 
             client_name, 
             CAST(improvement_areas AS VARCHAR(MAX)), 
             CAST(strengths AS VARCHAR(MAX))
    ORDER BY review_date DESC;
    

    【讨论】:

    • 我无法使用改进区域、优势列进行分组,因为这些是文本类型
    • 到带有TEXT 列的GROUP BY,您可以将其转换为VARCHAR(MAX)NVARCHAR(MAX),无论您认为合适。更新的答案也相同。
    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 2018-03-29
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    相关资源
    最近更新 更多