2011-11-28 53 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這是最有可能矯枉過正的問題,但一個很好的解決方案。 –