Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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_Sql_Mariadb - Fatal编程技术网

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

Mysql 自动插入具有重复数据的行,遵循两种模式,mysql,sql,mariadb,Mysql,Sql,Mariadb,我有一张这样的桌子: | 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

我有一张这样的桌子:

| 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语句,该语句按照此模式自动填充表,直到ID456为止

因此,字母在序列结束前都是abou,abou,abou,abou,abou,abou,abou,abou,abou,abou,abou,abou,abou,abou,abou,abou,abou,abou


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

如果您有某种数字表,这将有所帮助。下面是一种使用交叉连接和一些算法的方法:

select (@rn := @rn + 1) as id, l.letter, (n1 + n2*5 + n3*25) as number
from (select 0 as n union all select 1 as n union all select 2 as n union all select 3 union all select 4
     ) n1 cross join
     (select 0 as n union all select 1 as n union all select 2 as n union all select 3 union all select 4
     ) n2 cross join
     (select 0 as n union all select 1 as n union all select 2 as n union all select 3 union all select 4
     ) n3 cross join
     (select 'a' as letter union all select 'b' union all select 'c' union all select 'd'
     ) l cross join
     (select @rn := 0) params
where n1 + n2*5 + n3*25 < 114;

如果你有某种数字表的话会有帮助的。下面是一种使用交叉连接和一些算法的方法:

select (@rn := @rn + 1) as id, l.letter, (n1 + n2*5 + n3*25) as number
from (select 0 as n union all select 1 as n union all select 2 as n union all select 3 union all select 4
     ) n1 cross join
     (select 0 as n union all select 1 as n union all select 2 as n union all select 3 union all select 4
     ) n2 cross join
     (select 0 as n union all select 1 as n union all select 2 as n union all select 3 union all select 4
     ) n3 cross join
     (select 'a' as letter union all select 'b' union all select 'c' union all select 'd'
     ) l cross join
     (select @rn := 0) params
where n1 + n2*5 + n3*25 < 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
而不是价值观:

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 DIV 4+1替换rn-1%4+1作为seq


您可以使用以下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
而不是价值观:

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 DIV 4+1替换rn-1%4+1作为seq


MySQL插入应该从脚本语言PHP、Perl等调用,并根据需要递增值。MySQL插入应该从脚本语言PHP、Perl等调用,并根据需要递增值。我认为这不是我们想要的结果。他可能想要a,114b,114c,114d,114所以114x4=456@JuanCarlosOropeza抢手货我已经更新了我的答案。谢谢,就是那个!我认为这不是我想要的结果。他可能想要a,114b,114c,114d,114所以114x4=456@JuanCarlosOropeza抢手货我已经更新了我的答案。谢谢,就是那个!