2011-11-28 171 views
5

我对SQL脚本非常陌生,无法弄清楚如何针对每个循环制定具体的操作。我需要做这样的事情:SQL foreach循环

我有SitesSiteCrawls表。

基本上,我需要为每个站点创建一个新的SiteCrawl并且SiteCrawlSite_ID列将等于该站点的ID。

我该怎么做?

+4

一个字:**不这样做**与foreach循环 - SQL是**集基于**的 - 您认为并在**数据集**中运行。像使用foreach循环一样使用RBAR(逐行调整行)对性能非常不利 –

回答

12
insert SiteCrawl 
(
    Site_ID 
) 
select 
s.Site_ID 
from Site as s 
where s.Site_ID not in (select Site_ID from SiteCrawl) 
4
insert into site_crawl (site_id) values (select site_id from site); 

所以基本上:在普通SQL中没有特定的/每一个,你总是把表和行结果作为一个语句处理。 所以你也可以这样说:SQL语句不是for/each。 有了这些知识,您可以看到上面的查询将为站点表中的每个site_id插入一行到site_crawl中。你很可能想要使用比这更多的值,但给你的问题,这是我可以为你做的所有信息:)

另外:你想了解更多关于sql是如何以及如何使用它。

玩得开心,SQL很有趣!

+0

感谢您的反馈。就像我说的那样,在sql中真正新的并且肯定会在它上面工作。 – ygit

1
insert into SiteCrawls (SiteID) 
select SiteID 
    from Sites 
+0

刚刚有同样的问题,这有帮助。 –

3

在SQL您通常不想遍历每个记录。这是非常低效的。

你可以做类似

insert into SiteCrawl (Site_Id) 
select Id from Sites 
1

可以通过触发做到

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

+1这是最有可能矫枉过正的问题,但一个很好的解决方案。 –