2013-08-01 66 views
0

我想做一个这样的查询:MySQL的:INSERT INTO用foreach像

INSERT INTO `gesdoc_docs_authorizations` 
    (`gesdoc_docs_id`, `id_profil_do`, `autorisation`, `personal_doc`) 
VALUES (
    (SELECT `id` 
    FROM `gesdoc_docs`), 
    (SELECT `id` 
    FROM `users_profil_do`), 
    1, 0 
    ); 

gesdoc_docs有40行,users_profil_do有700行。 我需要为users_profil_do中的每行有andco_gesdoc_docs关联的40行(所以通常我的查询会插入28000行)。 这可能吗?我怎样才能做到这一点的MySQL查询?

感谢您的帮助:)

回答

2

SELECT插入,当你不使用VALUES关键字。

INSERT INTO gesdoc_docs_authorizations 
    (`gesdoc_docs_id`, `id_profil_do`, `autorisation`, `personal_doc`) 
SELECT g.id, d.id, 1, 0 
FROM gesdoc_docs g 
JOIN users_profil_do d 

如果不使用ON子句指定连接条件,它把所有行的匹配,这会导致两个表的完整笛卡尔积。

+0

感谢它的作品:)我不知道你可以使用没有连接的JOIN列,很好学习这个! – TikTaZ

+0

@TikTaZ [INNER JOIN](http://en.wikipedia.org/wiki/Join_%28SQL%29#Inner_join)without join column will perform a Cartesian product。如果表t1已经(1),(2)和表t2有(3),(4),那么't1 JOIN t2'将产生* 4 *组合:(1,3),(1,4),(2 ,3),(2,4)。 –