2013-03-01 22 views
5

我遇到問題。有三個表格: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 
... 

而結果我想SE E:

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 
... 

所以,我用這個代碼嘗試過(它是這裏的 「NOT NULL」 的標準,因爲這兩個T_target列是主鍵是很重要的)

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 

錯誤消息: 「Msg 512,Level 16,State 1,Line 2 子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。 的語句已終止「

然後我試着用VALUES語句而不是第一個SELECT和括號,但錯誤是一樣的

有一個類似的問題:。 mySQL query: How to insert with UNION? 但這個解決方案沒有按「T爲我工作,因爲它表明值,然後選擇之間的語法錯誤。

請給我一隻手。 謝謝!

+0

我沒有看過你的大部分問題,但是我認爲現有查詢的正確的語法是:'插入T_target(ID,project_No)選擇ID,21從T1,其中ID不爲NULL工會選擇ID,21從T2其中ID不是NULL' – Bridge 2013-03-01 14:41:06

回答

19

這應該做些什麼你需要

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 
+0

它的工作原理,謝謝! – A117 2013-03-04 10:15:01

+0

我通常會寫一個if語句,但是當使用這個策略時,它避免了我不得不多次寫入插入部分,非常感謝這個解決方案,從現在開始,我會盡可能地按照這種方式進行。:) – 2015-08-19 19:36:15

1

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

fyi:我認爲你不需要'獨特'與'聯合'。 – Kaf 2013-03-01 15:03:52

+0

你是對的。 - 對不起 – 2013-03-01 15:28:18