2012-09-07 77 views
3

我有一个查询提交表a中的多个项目。多个值在mysql中插入连接

例如:

insert into a values(id,name) (5,'john'),(6,'smith'); 

虽然我还需要与此ID选择从其他表中的一些第三值。

例如:

insert into a values(id,name,money) (5,'john',(select money from b where id=5)),(6,'smith',(select money from b where id=6)); 

的问题与上述的是,它是一个有些重复,并且也使用子选择。

我不知道是否有可能改写这个使用JOIN,(这也应该放心,有关系到表B上给定id,以免它插入一个NULL)。

任何想法?

回答

3

对于每个INSERT,您只允许输入一个SELECT,因此您需要重新编写该选项以选择多行,而不是一次插入多个值。您可以使用JOIN中的两组值来创建一个临时表格吗?INSERT

CREATE TEMPORARY TABLE _tmp_a (id INT PRIMARY KEY, name VARCHAR(255)); 
INSERT INTO _tmp_a (5, 'john'), (6, 'smith') 
INSERT INTO a VALUES (id, name, money) SELECT _tmp_a.id, _tmp_a.name, b.money FROM _tmp_a LEFT JOIN b ON b.id=_tmp_a.id 
+0

那么为什么不呢!这上面看起来不错,我会尝试一下。我还想知道是否有可能将'left join'替换为'join',所以它不会插入等于'null'的钱。我将检查它:) – Anonymous

+0

如果你想跳过那些没有在“右侧”的相应值的条目,你可以使用'RIGHT JOIN'。 – tadman

+0

Naah,'JOIN'是正确的。谢谢 :) – Anonymous