在MySql中是否有FOR循环之类的东西?

时间:2018-12-19 16:11:43

标签: mysql mysql-workbench

我有一张包含比赛信息的表,我需要为每个进球和每个球队返回一行。例如:

+--------+-------+-------+-------+-------+
|  Match | Team1 | goal1 | goal2 | Team2 |
+--------+-------+-------+-------+-------+
|    1   | Red   |   1   |   0   | Blue  |   
+--------+-------+-------+-------+-------+
|    2   | Green |   2   |   1   | Black |   
+--------+-------+-------+-------+-------+

我想为每行运行一个函数,为每个团队的每个目标返回一行。所以我的函数结果是:

+--------+-------+-------+
|  Goal  | Match | Team  |
+--------+-------+-------+
|    1   |   1   |  Red  |  
+--------+-------+-------+
|    2   |   2   | Green | 
+--------+-------+-------+
|    3   |   2   | Green |  
+--------+-------+-------+
|    4   |   2   | Black | 
+--------+-------+-------+

我的最终目标是每场比赛/每队/每个进球都需要有一行来手动填写记分员和分钟。由于我已完成40000场比赛,因此复制粘贴每一行并计入目标数量是一件很痛苦的事情。

我想从预先填充了尽可能多的信息的目标表开始。

2 个答案:

答案 0 :(得分:1)

创建一个表,该表包含从1到最大可能目标数的数字,即

CREATE TABLE numbers (
    num INT PRIMARY KEY
);
INSERT INTO numbers VALUES (1), (2), (3), (4), (5), (6), ...

然后您可以将此表与原始表连接起来:

SELECT num AS Goal, `Match`, Team
FROM numbers
JOIN (
    SELECT Team1 AS Team, goal1 AS goals, `Match`
    FROM matches
    UNION
    SELECT Team2 AS Team, goal2 AS goals, `Match`
    FROM matches
) ON num <= goals

答案 1 :(得分:-1)

同时在MySQL中使用循环语法示例:

delimiter //

CREATE procedure yourdatabase.while_example()
wholeblock:BEGIN
  declare str VARCHAR(255) default '';
  declare x INT default 0;
  SET x = 1;

  WHILE x <= 5 DO
    SET str = CONCAT(str,x,',');
    SET x = x + 1;
  END WHILE;

  select str;
END//

哪些印刷品:

mysql> call while_example();
+------------+
| str        |
+------------+
| 1,2,3,4,5, |
+------------+

MySQL中的FOR循环语法示例:

delimiter //

CREATE procedure yourdatabase.for_loop_example()
wholeblock:BEGIN
  DECLARE x INT;
  DECLARE str VARCHAR(255);
  SET x = -5;
  SET str = '';

  loop_label: LOOP
    IF x > 0 THEN
      LEAVE loop_label;
    END IF;
    SET str = CONCAT(str,x,',');
    SET x = x + 1;
    ITERATE loop_label;
  END LOOP;

  SELECT str;

END//

哪些印刷品:

mysql> call for_loop_example();

    +-------------------+
    | str               |
    +-------------------+
    | -5,-4,-3,-2,-1,0, |
    +-------------------+
    1 row in set (0.00 sec)

教程:http://www.mysqltutorial.org/stored-procedures-loop.aspx