我对SQL脚本非常陌生,无法弄清楚如何针对每个循环制定具体的操作。我需要做这样的事情:SQL foreach循环
我有Sites
和SiteCrawls
表。
基本上,我需要为每个站点创建一个新的SiteCrawl
并且SiteCrawl
的Site_ID
列将等于该站点的ID。
我该怎么做?
我对SQL脚本非常陌生,无法弄清楚如何针对每个循环制定具体的操作。我需要做这样的事情:SQL foreach循环
我有Sites
和SiteCrawls
表。
基本上,我需要为每个站点创建一个新的SiteCrawl
并且SiteCrawl
的Site_ID
列将等于该站点的ID。
我该怎么做?
insert SiteCrawl
(
Site_ID
)
select
s.Site_ID
from Site as s
where s.Site_ID not in (select Site_ID from SiteCrawl)
insert into site_crawl (site_id) values (select site_id from site);
所以基本上:在普通SQL中没有特定的/每一个,你总是把表和行结果作为一个语句处理。 所以你也可以这样说:SQL语句不是for/each。 有了这些知识,您可以看到上面的查询将为站点表中的每个site_id插入一行到site_crawl中。你很可能想要使用比这更多的值,但给你的问题,这是我可以为你做的所有信息:)
另外:你想了解更多关于sql是如何以及如何使用它。
玩得开心,SQL很有趣!
感谢您的反馈。就像我说的那样,在sql中真正新的并且肯定会在它上面工作。 – ygit
insert into SiteCrawls (SiteID)
select SiteID
from Sites
刚刚有同样的问题,这有帮助。 –
在SQL您通常不想遍历每个记录。这是非常低效的。
你可以做类似
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
;
+1这是最有可能矫枉过正的问题,但一个很好的解决方案。 –
一个字:**不这样做**与foreach循环 - SQL是**集基于**的 - 您认为并在**数据集**中运行。像使用foreach循环一样使用RBAR(逐行调整行)对性能非常不利 –