2010-10-28 92 views
2

我有一個查詢將行插入MySQL表基於查詢

SELECT A.a, A.b, A.c 
FROM A 
LEFT JOIN X ON A.a = X.x 
WHERE X.x IS NULL 

其中找到表項,這些已在表X中沒有相應的條目我怎樣才能插入此查詢的結果爲表X?如果我只有幾個項目,我會做

INSERT INTO X(xa, xb, xc) 
VALUES ('a1', 'b1', 'c1'), ('a2', 'b2', 'c2') 

(順便說一句:列d設定爲AUTO_INCREMENT;這是否做正確的事情,如果我運行上面同樣,列E,F,?。 ..,h有默認值;我相信這些將相應設置)。

這不會很難通過導出,爲Excel中的每一行編寫單獨的SQL片段並執行每個;我問這主要是爲了更好地學習SQL。

(當然我真正的表有更多的領域和各種併發症,但我認爲這種簡化就足夠了。)

回答

2
INSERT INTO X (xa, xb, xc) 
    SELECT A.a, A.b, A.c 
    FROM A 
LEFT JOIN X ON A.a = X.x 
    WHERE X.x IS NULL 
+0

+1:擊敗我29秒! – 2010-10-28 19:03:47

+0

我不相信這會起作用,因爲select會引用他插入的表。 – Cfreak 2010-10-28 19:05:52

+0

@Cfreak:'X'不是同一張表 – 2010-10-28 19:15:50

0

試試這個:

INSERT INTO X(xa, xb, xc) 
SELECT A.a, A.b, A.c 
    FROM A 
    LEFT JOIN X ON A.a = X.x 
WHERE X.x IS NULL 
0

可以使用INSERT ... SELECT語法。但是,您不得不使用臨時表,因爲您無法將其插入到您在select語句中加入的表中。

create temporary table Y like X; 
INSERT INTO Y (x,y,z) SELECT a,b,c FROM A LEFT JOIN X ON a=x; 
INSERT INTO X SELECT * FROM Y;