3

テーブル B を生成するために使用するテーブル A があるとしますON DUPLICATE KEY

テーブル B には、A、B、C の 3 つの列があります。

INSERT行がまだ存在しない場合にのみ、これを行います。A と B の組み合わせで行が存在するかどうかを判断できます。そのためにWHERE NOT EXISTSステートメントを使用します。

INSERT INTO TableB
(A, B, C)
SELECT 
SUM(A),
SUM(B),
SUM(C)
FROM TableA
WHERE NOT EXISTS (SELECT * FROM TABLE B WHERE A=A AND B=B)
GROUP BY A, B

テーブル B が空の場合、行が挿入されます。ただし、テーブル B にレコードがあるとすぐに、テーブル B にまだ存在していなくても、行は挿入されません。

4

2 に答える 2

5

サブクエリでエイリアスを使用して、外側のクエリの列にプレフィックスを付ける必要があります。

INSERT INTO TableB (A, B, C)
  SELECT 
      SUM(A),
      SUM(B),
      SUM(C)
    FROM TableA ta
  WHERE NOT EXISTS (SELECT * FROM TableB tb WHERE tb.A=ta.A AND tb.B=ta.B)
  GROUP BY A, B

あなたが書いた方法では、テーブルTableBの値をTableB(各行とそれ自体)の値と比較していたので、少なくとも1行を挿入すると、「それ自体と等しい行がない」という条件は決して真ではありませんでした。

于 2013-11-06T21:38:29.363 に答える