Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在不增加记录的情况下连接三个查询_Mysql_Join_Left Join - Fatal编程技术网

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列,则此代码有效。对于更多列,需要交叉联接。