MySQL在不增加记录的情况下连接三个查询
我有三张桌子:MySQL在不增加记录的情况下连接三个查询,mysql,join,left-join,Mysql,Join,Left Join,我有三张桌子: tblUnits[单位ID,国家] t税率[单位ID、月份、持续时间/小时] tblMetrics[单位ID、月份、服务时间] 并在其上构建了3个查询: 一, 输出: Unit_ID 1 2 3 Ev_Count | Duration 1 | 10 SumSH 100 输出: Unit_ID 1 2 3 Ev_Count | Duration 1 | 10 SumSH 100 输出: Unit_ID 1 2 3 Ev_Count |
tblUnits[单位ID,国家]
t税率[单位ID、月份、持续时间/小时]
tblMetrics[单位ID、月份、服务时间]
并在其上构建了3个查询:
一,
输出:
Unit_ID
1
2
3
Ev_Count | Duration
1 | 10
SumSH
100
输出:
Unit_ID
1
2
3
Ev_Count | Duration
1 | 10
SumSH
100
输出:
Unit_ID
1
2
3
Ev_Count | Duration
1 | 10
SumSH
100
现在,我想将这3个查询组合起来,得到如下输出:
Ev_Count | Duration | SumSH
1 | 10 | 100
带有两个左联接的我的查询将tblEvents和tblMetrics值相乘。如果不获得额外的行,则无法联接查询,这将返回错误的聚合,并且由于您的MySql版本不支持
CTE
s,因此您必须使用两次带有运算符的第一个查询:
SELECT
SUM(Event_Type IN ('X', 'Y')) Ev_Count,
SUM(CASE WHEN Event_Type IN ('X', 'Y') THEN Duration_Hrs END) Duration,
(
SELECT SUM(Service_Hrs)
FROM tblMetrics
WHERE Month = 'May'
AND Unit_ID IN (SELECT Unit_ID FROM tblUnits WHERE City = 'NewYork')
) SumSH
FROM tblEvents
WHERE Design = 'GoodDesign' AND Month = 'May'
AND Unit_ID IN (SELECT Unit_ID FROM tblUnits WHERE City = 'NewYork')
此外,聚合列Ev\u Count
和Event\u Type
都使用以下条件:
Event_Type IN ('X', 'Y')
那么,为什么不在WHERE子句中筛选此条件并避免条件聚合:
SELECT
COUNT(*) Ev_Count,
SUM(Duration_Hrs) Duration,
(
SELECT SUM(Service_Hrs)
FROM tblMetrics
WHERE Month = 'May'
AND Unit_ID IN (SELECT Unit_ID FROM tblUnits WHERE City = 'NewYork')
) SumSH
FROM tblEvents
WHERE Design = 'GoodDesign' AND Month = 'May'
AND Event_Type IN ('X', 'Y')
AND Unit_ID IN (SELECT Unit_ID FROM tblUnits WHERE City = 'NewYork')
如果不获取额外的行,则无法加入查询,这将返回错误的聚合,并且由于您的MySql版本不支持CTE
s,因此必须使用两次运算符中的第一次查询:
SELECT
SUM(Event_Type IN ('X', 'Y')) Ev_Count,
SUM(CASE WHEN Event_Type IN ('X', 'Y') THEN Duration_Hrs END) Duration,
(
SELECT SUM(Service_Hrs)
FROM tblMetrics
WHERE Month = 'May'
AND Unit_ID IN (SELECT Unit_ID FROM tblUnits WHERE City = 'NewYork')
) SumSH
FROM tblEvents
WHERE Design = 'GoodDesign' AND Month = 'May'
AND Unit_ID IN (SELECT Unit_ID FROM tblUnits WHERE City = 'NewYork')
此外,聚合列Ev\u Count
和Event\u Type
都使用以下条件:
Event_Type IN ('X', 'Y')
那么,为什么不在WHERE子句中筛选此条件并避免条件聚合:
SELECT
COUNT(*) Ev_Count,
SUM(Duration_Hrs) Duration,
(
SELECT SUM(Service_Hrs)
FROM tblMetrics
WHERE Month = 'May'
AND Unit_ID IN (SELECT Unit_ID FROM tblUnits WHERE City = 'NewYork')
) SumSH
FROM tblEvents
WHERE Design = 'GoodDesign' AND Month = 'May'
AND Event_Type IN ('X', 'Y')
AND Unit_ID IN (SELECT Unit_ID FROM tblUnits WHERE City = 'NewYork')
您的MySql版本是什么?MySql服务器5.6.34您的MySql版本是什么?MySql服务器5.6.34当我尝试向SumSH子查询添加一列“SUM(Period_Hrs)”时,我得到一个错误“操作数应包含1列”。这是否意味着我需要添加另一个子查询来选择下一列?然后我必须使用第1个查询3次。如果子查询只返回1列,则此代码有效。对于更多的列,您需要交叉联接。当我尝试向SumSH子查询添加一列“SUM(Period_Hrs)”时,我得到一个错误“操作数应包含1列”。这是否意味着我需要添加另一个子查询来选择下一列?然后我必须使用第1个查询3次。如果子查询只返回1列,则此代码有效。对于更多列,需要交叉联接。