12
votes

Insert de boucle SQL basé sur la liste des identifiants

Hey, j'ai des écrivains SQL Block. Voici donc ce que j'essaie de faire basé sur le pseudo-code

int[] ids = SELECT id FROM (table1) WHERE idType = 1 -> Selecting a bunch of record ids to work with
FOR(int i = 0; i <= ids.Count(); ++i) -> loop through based on number of records retrieved
{
    INSERT INTO (table2)[col1,col2,col3] SELECT col1, col2, col3 FROM (table1)
    WHERE col1 = ids[i].Value AND idType = 1 -> Inserting into table based on one of the ids in the array

    // More inserts based on Array ID's here
}


1 commentaires

Quel SGBD utilisez-vous? La réponse pour T-SQL serait différente de la réponse pour MySQL.


3 Réponses :


7
votes
INSERT INTO table2
(
    col1,
    col2,
    col3
)
SELECT 
    table1.col1, 
    table1.col2, 
    table1.col3
FROM table1
WHERE table1.ID IN (SELECT ID FROM table1 WHERE table1.idType = 1)

3 commentaires

Pourquoi déranger avec le dans ? Pourquoi pas seulement où table1.idtype = 1


Si supposons que la valeur Col2 doive être extraite de différentes tables (autre que Table1) comment chnage cette requête?


Si les identifiants sont entrés et utilisés en tant que duplicata dans (), il ne calculera que la valeur de chaque identifiant une fois. Par exemple: Sélectionnez la somme (prix) à partir de produits vendus où SPID IN (1,2,3,4,5,1,1,3,5), il produira le même résultat avec: Sélectionnez la somme (Prix) à partir de produits vendus où SPID IN (1 , 2,3,4,5)



10
votes

Vous pouvez simplement utiliser:

Insert Into Table2 (Col1, Col2, Col3)
Select col1, Col2, Col3
From Table1
Where idType = 1


2 commentaires

Désolé, je ne voulais pas que ma question soit longue et compliquée, mais il y aura d'autres inserts basés sur l'ID dans la boucle.


@AYO: En ne comprenant pas toutes les informations de votre question, vous retardez réellement la réponse dont vous avez besoin. Le pseudo code est bien tant que la logique requise est toujours là. En tout état de cause, la réponse fournie par @mikael devrait vouloir que vous ayez besoin.



26
votes

C'est ce que vous demandez. XXX

Mais si tout est tout ce que vous allez faire dans la boucle, vous devez vraiment utiliser la réponse de Barry. < / p>


0 commentaires