gpt4 book ai didi

mysql - 自动插入具有重复数据的行,遵循两种模式

转载 作者:行者123 更新时间:2023-11-29 07:24:16 24 4
gpt4 key购买 nike

我有一个如下所示的表格:

| id  | letter | number |
|-----|--------|--------|
| 1 | a | 1 |
| 2 | b | 1 |
| 3 | c | 1 |
| 4 | d | 1 |
| 5 | a | 2 |
| 6 | b | 2 |
| 7 | c | 2 |
| 8 | d | 2 |
| 9 | a | 3 |
| 10 | b | 3 |
| 11 | c | 3 |
| 12 | d | 3 |
|etc..| | |

我正在尝试创建一个 SQL 语句,按照此模式自动填充表,直到 id 456。

所以字母是 ABCD ABCD 直到序列结束,并且每个 4 个“组”都有一个数字,应该达到 114。

我不确定解决这个问题的最佳方法是什么,任何建议将不胜感激。

最佳答案

您可以使用以下 SQL 脚本将所需的值插入表中:

INSERT INTO target (id, letter, `number`)
SELECT rn, col, (rn - 1) % 4 + 1 AS seq
FROM (
SELECT col, @rn := @rn + 1 AS rn
FROM (
SELECT 'a' AS col UNION ALL SELECT 'b' UNION ALL
SELECT 'c' UNION ALL SELECT 'd') AS t
CROSS JOIN (
SELECT 1 AS x UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) AS t1
CROSS JOIN (
SELECT 1 AS x UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) AS t2
CROSS JOIN (SELECT @rn := 0) AS var ) AS s
WHERE rn <= 456

上面的查询使用 11 x 11 笛卡尔积创建一个包含 121 行的数字表。这些行与内联表 ('a'), ('b'), ('c'), ('d') 交叉连接,总共生成 484 行。外部查询仅选择所需的行,即总共 456 行。

注意:如果您想插入值:

id, letter, number
1 'a' 1
2 'b' 1
3 'c' 1
4 'd' 1
5 'a' 2
6 'b' 2
7 'c' 2
8 'd' 2
... etc

而不是值:

id, letter, number
1 'a' 1
2 'b' 2
3 'c' 3
4 'd' 4
5 'a' 1
6 'b' 2
7 'c' 3
8 'd' 4
... etc

然后只需将 (rn - 1) % 4 + 1 AS seq 替换为 (rn - 1) DIV 4 + 1 AS seq

Demo here

关于mysql - 自动插入具有重复数据的行,遵循两种模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35041250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com