2010-10-28 63 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;