SQL foreach循环

SQL foreach循环,sql,Sql,我对SQL脚本非常陌生,不知道如何为每个循环创建特定的脚本。我需要这样做: 我有站点和站点爬网表 基本上,对于每个站点,我需要创建一个新的sitegrawl,并且sitegrawl的site\u ID列将等于该站点的ID 我该怎么做 insert into site_crawl (site_id) values (select site_id from site); 所以基本上:在普通SQL中没有特定的for/each,您总是将结果的表和行作为一条语句来处理。 所以您也可以说:SQL语句不可能

我对SQL脚本非常陌生,不知道如何为每个循环创建特定的脚本。我需要这样做:

我有
站点
站点爬网

基本上,对于每个站点,我需要创建一个新的
sitegrawl
,并且
sitegrawl
site\u ID
列将等于该站点的ID

我该怎么做

insert into site_crawl (site_id) values (select site_id from site);
所以基本上:在普通SQL中没有特定的for/each,您总是将结果的表和行作为一条语句来处理。 所以您也可以说:SQL语句不可能是for/each以外的东西。 有了这些知识,您可以看到上面的查询将为site表中的每个site\u id在site\u crawl中插入一行。您很可能希望使用更多的值,但根据您问题中的信息,我只能为您做以下几点:)

另外:您想了解更多关于什么是sql以及如何使用sql的信息


玩得开心,SQL非常有趣

在SQL中,您通常不希望在每条记录上循环。效率很低

insert into SiteCrawls (SiteID)
select SiteID 
  from Sites
你可以这样做

insert into SiteCrawl (Site_Id)
select Id from Sites

你可以用扳机来做

CREATE TRIGGER tg AFTER INSERT ON `Sites`
FOR EACH ROW
BEGIN
insert into SiteCrawls(Site_ID) values (NEW.id);
END
;

一句话:不要使用foreach循环—SQL是基于集合的—您在数据集合中思考和操作。像foreach循环一样使用RBAR(一行接一行)对性能非常不利+1对于给定的问题来说,这很可能是一种过火的解决方案,但这是一个很好的解决方案。感谢您的反馈。就像我说的,sql非常新,我们一定会处理它。只是有同样的问题,这很有帮助。
CREATE TRIGGER tg AFTER INSERT ON `Sites`
FOR EACH ROW
BEGIN
insert into SiteCrawls(Site_ID) values (NEW.id);
END
;