簡體   English   中英

從另一張表插入一張表

[英]insert into one table from another

如果Table_B 中的數據在Table_A 中不存在,我想將列1 的一些數據從Table_B 插入到Table_A。 例如,'Headache' 在 Table_B 的 column1 中,而不在 Table_A 的 column1 中。 謝謝。 我寫了下面的 SQL,但它不起作用:

insert into Table_A(column1)
select column1
from Table_B
where column1 not in (select column1 from Table_A)

嘗試這個:

INSERT INTO Table_A(column1)
SELECT B.column1
FROM Table_B B
LEFT JOIN Table_A A ON B.column1 = A.column1
WHERE A.column1 IS NULL
Insert into Table_A(column1)
select column1 from Table_B 
left join Table_A  on Table_B.column1 = Table_A.column1
where A.column1 is null

沒有樣本數據很難確定,但我最好的猜測是table_A.Column1有一個NULL值。 如果您確實有空值,則您的查詢將等效於:

SELECT  Column1
FROM    Table_B
WHERE   Column1 NOT IN (1, 2, 3, NULL);

這相當於:

SELECT  Column1
FROM    Table_B
WHERE   Column1 <> 1
AND     Column1 <> 2
AND     Column1 <> 3
AND     Column1 <> NULL;

由於Column1 <> NULL不為真,查詢不返回任何結果。 在您可能有 NULL 列的情況下,在語法上最相似的方法是使用NOT EXISTS

INSERT INTO Table_A(column1)
SELECT  Column1
FROM    Table_B AS B
WHERE   NOT EXISTS (SELECT 1 FROM Table_A AS A WHERE A.Column1 = B.Column1);

但是,您可以使用的另一種方法是:

INSERT INTO Table_A(column1)
SELECT  Column1
FROM    Table_B AS B
        LEFT JOIN Table_A AS A
            ON A.Column1 = B.Column1
WHERE   A.Column1 IS NULL;

通過左連接到table_A然后聲明A.Column1必須為NULL ,您將刪除Table_A中已經存在的任何記錄。

我更喜歡前者( NOT EXISTS ),因為我認為意圖更清晰,但如果你使用 MySQL,后者會表現得更好

或者你也可以使用:

INSERT INTO Table_A(column1)
SELECT  Column1
FROM    Table_B AS B
WHERE   B.Column1 IS NOT NULL
AND     B.COlumn1 NOT IN (SELECT A.Column1 FROM Table_A AS A WHERE A.Column1 IS NOT NULL);

使用 MERGE 語句怎么樣?

MERGE INTO TABLE_A a
USING TABLE_B b ON (a.column1=b.column1)
WHEN NOT MATCHED THEN
    INSERT (column1) VALUES (b.column1);

暫無
暫無

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

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