2012-12-07 78 views
-2

我想從table_B中插入值到table_A,其中滿足一些條件。這是我想做的事情,但不工作:插入帶條件的函數sql

insert into table_A(ID, value1, value2) 
select ID, value1, value2 
from table_B 
where table_B.ID <> table_A.ID 

我收到此錯誤:

The multi-part identifier "table_A.ID" could not be bound

感謝

+3

您還沒有申報表-B的行如何與TABLE_A。你可能要做的是這樣的:'WHERE table_B.ID NOT IN(SELECT ID FROM table_A)' – PinnyM

+0

你實際上並沒有在任何地方選擇table_A值。你可以使用'WHERE EXISTS'和額外的select語句。這只是一種做法。如果您查看JOIN vs IN與EXISTS,就效率而言,關於該主題的討論頗多。 – Ally

+0

@ user1858332請付出一些努力。這類問題已經被問到。 – Smit

回答

5

它不喜歡的工作。您沒有在插入語句中加入表格。使用

insert into table_A(ID, value1, value2) 
select ID, value1, value2 
from table_B 
where ID not in (select ID from table_A) 
+0

我刪除我的答案,因爲它只是你的確切副本。 – Smit

1

通常情況下,右連接速度更快

insert into table_A (ID, value1, value2) 
select b.* 
    from table_b b 
     right join table_a a 
     on a.ID = b.ID 
where a.ID is null 

由於這是MERGE語句在SQL2003標準中引入一個共同的問題。您可以根據特定條件更新現有行,插入新行並刪除其他行。

merge into table_a a 
    using table_B b 
    on (a.ID=b.ID) 
when not matched then 
    insert (ID, value1, value2) 
    values (b.ID, b.value1, b.value2) 

(未經測試)