簡體   English   中英

插入聯合

[英]Insert into with union

我有個問題。 有三個表:T1,T2,T_target。 T1和T2表有許多不同的列,但我只需要兩列的ID列。 T_target表當然有一個ID列,另一個是:project_No。

有一些ID也出現在T1和T2中,但是我不想在它們之間創建重復項,如果兩個表中都出現了ID,它只需要插入T_target一次但是如果它已經在T_target中那么它是允許兩次行動。 另一個標准是每個新插入的ID必須在'project_No'列中為值21。 所以,例如:

T1:

ID
2548
2566
2569
2843
2888
...

T2:

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

T_target:

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

結果我想看到:

T_target:

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子查詢返回的值超過1。當子查詢跟隨=,!=,<,<=,>,> =或子查詢為時,不允許這樣做用作表達式。聲明已經終止。“

然后我嘗試使用VALUES語句而不是第一個SELECT和括號,但錯誤是相同的。

有一個類似的問題: mySQL查詢:如何使用UNION插入? 但是這個解決方案對我不起作用,因為它表示VALUE和SELECT之間的語法錯誤。

拜托,幫我一把。 謝謝!

這應該做你需要的

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 

我認為你必須稍微修改一下,以避免在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM