2011-11-28 14 views
5

Sono molto nuovo agli script SQL e non riuscivo a capire come creare uno specifico per ogni ciclo. Devo fare qualcosa del genere:Ciclo foreach SQL

Ho tabelle Sites e SiteCrawls.

Fondamentalmente, per ogni sito ho bisogno di creare un nuovo SiteCrawl e quella SiteCrawl della colonna Site_ID sarà uguale all'ID di quel sito.

Come posso fare questo?

+4

Una sola parola: ** non lo fanno ** con un ciclo foreach - SQL è ** insieme -basato ** - tu pensi e operi in ** serie di dati **. Usare RBAR (row-by-agonizing-row) come un ciclo foreach è molto negativo per le prestazioni –

risposta

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); 

Quindi in pratica: non esiste uno specifico per/in SQL semplice, si gestiscono tabelle e righe di risultati sempre come un'unica istruzione. Quindi potresti anche dire: non c'è modo in cui un'istruzione SQL sia qualcos'altro che una per/each. Con questa conoscenza, puoi vedere che la query sopra riportata inserirà una riga in site_crawl per ogni id_disco nella tabella del sito. Molto probabilmente vuoi usare più valori di questo, ma date le informazioni dalla tua domanda è tutto quello che posso fare per te :)

Inoltre: vuoi leggere di più su cosa sia sql e come è usato.

Divertiti, SQL è molto divertente!

+0

Grazie per il tuo feedback. Come ho detto, davvero nuovo in SQL e sicuramente ci lavorerò sopra. – ygit

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

Ho appena avuto lo stesso problema, questo è stato aiutato. –

3

In SQL in genere non si vuole un ciclo su ogni record. È molto inefficiente.

Si potrebbe fare qualcosa di simile

insert into SiteCrawl (Site_Id) 
select Id from Sites 
1

si può fare da innesco

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

+1 questo è il più probabile eccessivo per il problema dato, ma una bella soluzione. –