19

私は問題があります。T1、T2、T_target の 3 つのテーブルがあります。T1 および T2 テーブルにはさまざまな列がありますが、両方の ID 列だけが必要です。T_target テーブルにはもちろん ID 列があり、もう 1 つ、project_No があります。

T1 と T2 にも表示される ID がいくつかありますが、それらの間で重複を作成したくありません。ID が両方のテーブルに表示される場合は、T_target に 1 回だけ挿入する必要がありますが、既に T_target にある場合は2回行動することが許されています。もう 1 つの基準は、新しく挿入されたすべての ID が「project_No」列の値 21 でなければならないということです。たとえば、次のようになります。

T1:

ID
2548
2566
2569
2843
2888
...

T2:

ID
2557
2566
2569
2700
2913
2994
3018
5426
...

T_ターゲット:

ID     project_No
2976   1
3331   7
4049   7
5426   8
5915   3
6253   10
...

そして、私が見たい結果:

T_ターゲット:

ID     project_No
2548   21
2557   21
2566   21
2569   21
2700   21
2843   21
2888   21
2913   21
2976   1
2994   21
2018   21
3331   7
4049   7
5426   8
5426   21
5915   3
6253   10
...

それで、私はこのコードでそれを試しました(T_target列の両方が主キーであるため、ここで「NOT NULL」基準にすることが重要です):

insert into T_target (ID, project_No)
  select (select ID
  from T1 where ID is not NULL
 union
  select ID
  from T2 where ID is not NULL), 21

select * from T_target

エラー メッセージ: 「メッセージ 512、レベル 16、状態 1、行 2 サブクエリが複数の値を返しました。これは、サブクエリが =、!=、<、<=、>、>= に続く場合、またはサブクエリが式として使用されました。ステートメントは終了しました。」

次に、最初の SELECT と括弧の代わりに VALUES ステートメントを試しましたが、エラーは同じです。

同様の問題があります: mySQL query: How to insert with UNION? しかし、この解決策は、VALUE と SELECT の間の構文エラーを示しているため、うまくいきません。

手を貸してください。ありがとうございました!

4

2 に答える 2

41

これはあなたが必要とすることをするはずです

INSERT INTO T_target
            (ID,
             project_No)
SELECT ID,
       21
FROM   T1
WHERE  ID IS NOT NULL
UNION
SELECT ID,
       21
FROM   T2
WHERE  ID IS NOT NULL 
于 2013-03-01T14:41:22.810 に答える
3

selectステートメントでIDが重複しないように、少し修正する必要があると思います。

INSERT INTO T_target
            (ID,
             project_No)

SELECT ID, 21 
FROM (
SELECT ID
FROM   T1
WHERE  ID IS NOT NULL
UNION
SELECT ID
FROM   T2
WHERE  ID IS NOT NULL 
) A
于 2013-03-01T14:58:18.673 に答える