将2个查询与LEFT JOIN和3个表合并

问题描述

一个左联接有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;

enter image description here

具有2个表(project_reviews和project_review_remarks)的第二个左JOIN

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;

enter image description here

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

在第一个查询中是一对一关系 在第二个查询中是一对多关系(使用分组依据我在其中计算了很多行)

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

解决方法

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

  • 在选择中添加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_remarks具有不同的prr
  • 添加GROUP BYcolumns中的所有SELECT,例如GROUP BY pr.review_id,client_name,improvement_areas,strengths
  • 对于具有GROUP BY列的TEXT,您可以将其强制转换为VARCHAR(MAX)NVARCHAR(MAX)

在下面检查完整的查询。

SELECT  pr.review_id,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,CAST(improvement_areas AS VARCHAR(MAX)),CAST(strengths AS VARCHAR(MAX))
ORDER BY review_date DESC;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...