Mysql 多表SQL SELECT语句
我试图从两个表和项目中获得结果,如下所示,这两个表中有两个不同的规定。我们希望从具有完全相同字段的存档和项目中获取Designer、ProjectNum和total Amount。存档和项目有一个名为CustomerMail的字段,我想用它来排除名为Profile的不同表中的任何内容,该表名为CustomerMail,customerStatus为Cancelled。我还想从另一个名为changeorder的表中获取change_total,该表的ProjectNum与archive和project相同 我首先使用了一个联合来将项目和归档文件结合在一起,并添加了代码来删除已取消的项目Mysql 多表SQL SELECT语句,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我试图从两个表和项目中获得结果,如下所示,这两个表中有两个不同的规定。我们希望从具有完全相同字段的存档和项目中获取Designer、ProjectNum和total Amount。存档和项目有一个名为CustomerMail的字段,我想用它来排除名为Profile的不同表中的任何内容,该表名为CustomerMail,customerStatus为Cancelled。我还想从另一个名为changeorder的表中获取change_total,该表的ProjectNum与archive和proje
SELECT DISTINCT(designerName),
SUM(total),
SUM(amount)
FROM
(
SELECT DISTINCT(Building_designer) as designerName,
COUNT(DISTINCT(Project_Num))as total,
SUM(archive.total_amount) as amount
FROM `archive`
INNER JOIN profiles
ON archive.customer_email = profiles.customer_email
WHERE profiles.customer_status != "Cancelled"
AND SUBSTRING(archive.Project_Num,1,2)=17
GROUP BY designerName
UNION
SELECT DISTINCT(Building_designer) as designerName,
COUNT(DISTINCT(Project_Num))AS total,
SUM(projects.total_amount) AS amount
FROM `projects`
INNER JOIN profiles
ON projects.customer_email = profiles.customer_email
WHERE profiles.customer_status != "Cancelled"
AND SUBSTRING(projects.Project_Num,1,2)=17
GROUP BY designerName
) AS temp
GROUP BY designerName
我试图从名为changeorder的表中获取totalAMOUNT。是否最好再进行一次联接以包含该表
下面是一个示例,它在不将其添加到此语句的情况下工作
SELECT SUM(DISTINCT(change_total))
FROM `changeorder`
WHERE SUBSTRING(project_num,1,2)=17
我之所以需要添加另外两个表,是因为它还跟踪取消的内容。因此,我需要总结与每个人相关的所有项目编号的变更总数。不到两个月前,我从Hello World开始编写代码 如果我理解正确,您需要三组数据: 1名设计师、ProjectNum和存档中的总金额 2设计师、项目数量和项目总金额 3变更通知单中的变更总金额 您希望从前两种情况中排除在不同表中取消客户状态的任何情况 如果这些都正确,请尝试:
SELECT a.Designer, a.ProjectNum, a.total_amount,
prjct.Designer, prjct.ProjectNum, prjct.total_amount,
chgOrd.change_total
-- the first two JOINs are to enable the WHERE later for knocking out
FROM archive a JOIN profiles prf ON a.customerEmail = prf.customerEmail,
projects prjct JOIN profiles prf ON prjct.customerEmail = prf.customerEmail
-- then another (double) JOIN to link changeorder properly to archive and project
changeorder chgOrd JOIN a ON chgOrd.ProjectNum = a.ProjectNum
JOIN prjct ON chgOrd.ProjectNum = prjct.ProjectNum
WHERE prf.customerStatus <> "Cancelled"
我希望我是对的,您可以使用在FROM开头创建的别名,并在其结尾的联接中使用它。SQL如果格式化,调试起来会容易得多。因此,如果要按列进行分组,则不需要使用DISTINCTs