1

現在の状況は、テーブル内の 400 百行のデータに対してフィールドにA01B03Z11およびの値をX21繰り返し追加することです。codeBabyCode

現在のテーブル - 'コードに値なし

上記は現在の表です - 「コード」列に値はありません

テーブルを更新する - 「コード」列に繰り返し値が追加されます

上記はテーブルを更新する予定です - 反復値が「コード」列に追加されます

4

2 に答える 2

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フィドルデモ

これにより、400百行の値、、、、A01およびがテーブルの列に挿入されます。B03Z11X21codeBabyCode

于 2013-01-10T08:41:11.990 に答える
0

@Mahmoud Gamal の回答で使用されているものと同じ仮想テーブルに 4 つの値を入れることができます。また、テーブルの 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
;

それ以外の場合は、変数を使用して、、、、をテーブルのすべての行に順番に割り当てると12それらの値を使用して仮想テーブルに参加できます。34

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 で再生できます。

于 2013-01-14T06:18:39.460 に答える