【问题标题】:MySql StoredProcedure with inner join带有内部连接的 MySql 存储过程
【发布时间】:2017-02-15 05:51:32
【问题描述】:

我有一个名为 region 的表,它有两列:region_id 是主键

       |region_id | region_code |
       | ----------+-------------+
       |         1 | Asia        |
       |         2 | Can         |
       |         3 | Cen         |
       |         4 | West        |
       |         5 | GNW         |
        ----------+-------------+

我还有另一个表employee,其中emp_id是主键,region_id_fk是映射到区域表的外键:

     +------+---------+---------+------------+---------------+---------+------------
    |emp_id| emp_name|global_id|region_id_fk|attendance_date|ispresent| is_billable|
    +------+---------+---------+------------+---------------+---------+---------
    |  1   | andrew  | candrew |          1 | 2017-02-13    |      1  |          1 |
    |  2   | andrew  | candrew |          1 | 2017-02-14    |      1  |          1 |
    |  3   | andrew  | candrew |          1 | 2017-02-15    |      1  |          1 |
    |  4   | andrew  | candrew |          1 | 2017-02-16    |      1  |          1 |
    |  5   | andrew  | candrew |          1 | 2017-02-17    |      0  |          1 |
    |  6   | simon   | csimon  |          1 | 2017-02-13    |      1  |          1 |
    |  7   | simon   | csimon  |          1 | 2017-02-14    |      1  |          1 |
    |  8   | simon   | csimon  |          1 | 2017-02-15    |      1  |          1 |
    |  9   | simon   | csimon  |          1 | 2017-02-16    |      1  |          1 |
    |  10  | simon   | csimon  |          1 | 2017-02-17    |      1  |          1 |
    |  11  | peter   | cpeter  |          2 | 2017-02-13    |      1  |          1 |
    |  12  | peter   | cpeter  |          2 | 2017-02-14    |      1  |          1 |
    |  13  | peter   | cpeter  |          2 | 2017-02-15    |      1  |          1 |
    |  14  | peter   | cpeter  |          2 | 2017-02-16    |      1  |          1 |
    |  15  | alvin   | calvin  |          2 | 2017-03-13    |      1  |          0 |
    |  16  | thomas  | thomas  |          2 | 2017-03-14    |      0  |          1 |
    |  17  | samuel  | csamuel |          2 | 2017-03-15    |      1  |          0 |
    |  18  | jackson | cjackson|          2 | 2017-03-16    |      1  |          0 |
    |  19  | clinda  | clinda  |          2 | 2017-03-17    |      1  |          1 |
    +--------+----------+-----------+--------------+-----------------+------

我已经有这种类型的查询,我在存储过程中使用了内部联接和计数:

DELIMITER $$
DROP PROCEDURE IF EXISTS test.some_proc $$
CREATE PROCEDURE test.some_proc(IN in_is_billable INT,IN in_month INT,IN in_ispresent INT)  
BEGIN  
      DECLARE capacitycount INT;
      DECLARE hrs INT;
      SET hrs=8;
      SELECT COUNT(ispresent)*8 AS team_capacity, region_code 
      FROM employee emp
      INNER JOIN  region r ON r.region_id=emp.region_id_fk
      WHERE (is_billable=in_is_billable) AND
      (MONTH(attendance_date)=in_month) AND   
      (ispresent=in_ispresent);
END $$
DELIMITER ;

它给了我以下结果: 团队容量|region_code 128 |亚洲

我希望我的存储过程提供区域表中存在的所有区域代码以及我在存储过程中计算的团队容量,这给了我正确的答案。

结果应该是这样的,但现在我只获得了一个地区的团队容量。

 team capacity|region_code
    128          |Asia
    39           |Can
    68           |Cen   

任何帮助将不胜感激, 在此先感谢:)

【问题讨论】:

    标签: mysql stored-procedures inner-join select-query


    【解决方案1】:

    你在语法中错过了 group by

    DELIMITER $$
    DROP PROCEDURE IF EXISTS test.some_proc $$
    CREATE PROCEDURE test.some_proc(IN in_is_billable INT,IN in_month INT,IN in_ispresent INT)  
    BEGIN  
           DECLARE capacitycount INT;
           DECLARE hrs INT;
           SET hrs=8;
           SELECT COUNT(ispresent)*8 AS team_capacity, region_code 
           FROM employee emp
           INNER JOIN  region r ON r.region_id=emp.region_id_fk
           WHERE (is_billable=in_is_billable) AND (MONTH(attendance_date)=in_month) AND   
          (ispresent=in_ispresent)
           group by r.region_code;
    END $$
    DELIMITER ;
    

    【讨论】:

    • 非常感谢,现在我得到了正确的答案@Ankit Agrawal
    • 接受这个答案。所以这将有助于其他人摆脱他们的问题
    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多