mysql中有类似for循环的东西吗?

wydwbb8l  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(431)

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

  1. +--------+-------+-------+-------+-------+
  2. | Match | Team1 | goal1 | goal2 | Team2 |
  3. +--------+-------+-------+-------+-------+
  4. | 1 | Red | 1 | 0 | Blue |
  5. +--------+-------+-------+-------+-------+
  6. | 2 | Green | 2 | 1 | Black |
  7. +--------+-------+-------+-------+-------+

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

  1. +--------+-------+-------+
  2. | Goal | Match | Team |
  3. +--------+-------+-------+
  4. | 1 | 1 | Red |
  5. +--------+-------+-------+
  6. | 2 | 2 | Green |
  7. +--------+-------+-------+
  8. | 3 | 2 | Green |
  9. +--------+-------+-------+
  10. | 4 | 2 | Black |
  11. +--------+-------+-------+

我的最终目标是,每一场比赛/每一队/每一个进球我都需要一行来手工填写记分员和记录。因为我有超过40000场比赛,复制粘贴每一行计数的目标数量是一种痛苦。
我想从一个目标表开始,该表预先填充了与我已经拥有的一样多的信息。

kcugc4gi

kcugc4gi1#

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

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

然后可以将此表与原始表联接:

  1. SELECT num AS Goal, `Match`, Team
  2. FROM numbers
  3. JOIN (
  4. SELECT Team1 AS Team, goal1 AS goals, `Match`
  5. FROM matches
  6. UNION
  7. SELECT Team2 AS Team, goal2 AS goals, `Match`
  8. FROM matches
  9. ) ON num <= goals
展开查看全部
soat7uwm

soat7uwm2#

mysql中的while循环语法示例:

  1. delimiter //
  2. CREATE procedure yourdatabase.while_example()
  3. wholeblock:BEGIN
  4. declare str VARCHAR(255) default '';
  5. declare x INT default 0;
  6. SET x = 1;
  7. WHILE x <= 5 DO
  8. SET str = CONCAT(str,x,',');
  9. SET x = x + 1;
  10. END WHILE;
  11. select str;
  12. END//

打印内容:

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

mysql中的for循环语法示例:

  1. delimiter //
  2. CREATE procedure yourdatabase.for_loop_example()
  3. wholeblock:BEGIN
  4. DECLARE x INT;
  5. DECLARE str VARCHAR(255);
  6. SET x = -5;
  7. SET str = '';
  8. loop_label: LOOP
  9. IF x > 0 THEN
  10. LEAVE loop_label;
  11. END IF;
  12. SET str = CONCAT(str,x,',');
  13. SET x = x + 1;
  14. ITERATE loop_label;
  15. END LOOP;
  16. SELECT str;
  17. END//

打印内容:

  1. mysql> call for_loop_example();
  2. +-------------------+
  3. | str |
  4. +-------------------+
  5. | -5,-4,-3,-2,-1,0, |
  6. +-------------------+
  7. 1 row in set (0.00 sec)

辅导的:http://www.mysqltutorial.org/stored-procedures-loop.aspx

展开查看全部

相关问题