用于插入重复数据的SQL语句

时间:2013-01-10 07:57:23

标签: mysql sql insert

目前的情况是在字段A01中以重复的方式为{400}数据行添加B03Z11X21code以下的值在表BabyCode中。

Current table - without value in 'Code" column

以上是当前表 - “代码”列中没有值

To be updated table - repetitive value is added in 'Code' column

以上是要更新的表格 - 在“代码”列中添加重复值

2 个答案:

答案 0 :(得分:1)

你可以这样做:

INSERT INTO BabyCode
SELECT Codes.Code
FROM
(
  SELECT id
  FROM
  (
  SELECT t3.digit * 100 + t2.digit * 10 + t1.digit + 1 AS id
  FROM         TEMP AS t1
    CROSS JOIN TEMP AS t2
    CROSS JOIN TEMP AS t3
  ) t
  WHERE id <= 400
) t,
(
  SELECT 1 AS ID, 'A01' AS Code
  UNION ALL
  SELECT 2, 'B03'
  UNION ALL 
  SELECT 3, 'Z11' 
  UNION ALL
  SELECT 4, 'X21'
) codes;

但是你需要定义一个临时表,用作锚表:

CREATE TABLE TEMP (Digit int);
INSERT INTO Temp VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

SQL Fiddle Demo

这会将值A01B03Z11X21的400个行插入表{code列中1}}。

答案 1 :(得分:0)

您可以将这四个值放入与@Mahmoud Gamal的答案中使用的虚拟表相同的虚拟表中,并且,如果表中的ID值从1开始并且是顺序的(既没有间隙也没有重复),则可以使用以下方法加入虚拟表并更新目标的Code列:

UPDATE YourTable t
INNER JOIN (
  SELECT 1 AS ID, 'A01' AS Code
  UNION ALL SELECT 2, 'B03'
  UNION ALL SELECT 3, 'Z11' 
  UNION ALL SELECT 4, 'X21'
) x
ON (t.ID - 1) MOD 4 + 1 = x.ID
SET t.Code = x.Code
;

否则,您可以使用变量将1234按顺序分配到表格的每一行,然后您就可以加入虚拟使用这些值的表:

UPDATE YourTable t
INNER JOIN (
  SELECT ID, @rnk := CASE WHEN @rnk = 4 THEN 0 ELSE @rnk END + 1 AS rnk
  FROM YourTable
  CROSS JOIN (SELECT @rnk := 0) x
  ORDER BY ID
) r ON t.ID = r.ID
INNER JOIN (
  SELECT 1 AS ID, 'A01' AS Code
  UNION ALL SELECT 2, 'B03'
  UNION ALL SELECT 3, 'Z11' 
  UNION ALL SELECT 4, 'X21'
) x
ON r.rnk = x.ID
SET t.Code = x.Code
;

这两个查询都可以在SQL Fiddle中播放: