1
votes

Comment puis-je insérer des centaines de milliers d'enregistrements à l'aide d'une seule instruction Insert?

J'ai besoin d'insérer des milliers d'enregistrements dans une table avec des valeurs spécifiques. Juste une condition que deux colonnes aient des valeurs dynamiques.

Logique métier: j'ai besoin d'insérer une valeur spécifique pour tous les sites Web de tous les clients. Un client peut avoir un ou plusieurs sites Web.

Si je veux écrire du SQL statique, mon SQL aura plus de 100k enregistrements à insérer!

Les enregistrements dans lesquels je veux insérer la table website_preferences as

SELECT w.id,w.cid FROM websites w WHERE deleted_by IS NOT NULL

sites Web table a le cid et website_id avec d'autres métadonnées.

Cette requête me donnera jusqu'à des centaines de milliers d'enregistrements:

INSERT into website_preferences ( cid, website_id, key, value, is_preview, updated_by, updated_on, created_by, created_on, details )
VALUES ( DYNAMIC_CID, DYNAMIC_WEBSITE_ID, 'NEIGHBORHOOD_GOOGLE_PLACES', 'airport, gas_station, supermarket, gym', 123, NOW(), 123, NOW(), NULL )

Comment puis-je récupérer le cid et id code > (identifiant du site Web) dans le tableau sites Web et associé à l'instruction d'insertion?


0 commentaires

3 Réponses :


3
votes

Utilisez l'insertion . . . sélectionnez :

insert into website_preferences ( cid, website_id, key, value, is_preview, updated_by, updated_on, created_by, created_on, details )
    select ws.cid, ws.website_id, 'NEIGHBORHOOD_GOOGLE_PLACES', 'airport, gas_station, supermarket, gym', 123, NOW(), 123, NOW(), NULL
    from websites ws
    where ws.deleted_by is not null;


0 commentaires

2
votes

Il semble que vous recherchiez un INSERT ... SELECT:

INSERT into website_preferences (cid, website_id, key, value, is_preview, updated_by, updated_on, created_by, created_on, details)
SELECT w.id, w.cid, 'NEIGHBORHOOD_GOOGLE_PLACES', 'airport, gas_station, supermarket, gym', 123, NOW(), 123, NOW(), NULL
FROM websites w 
WHERE deleted_by IS NOT NULL;


4 commentaires

Je ne sais pas pourquoi cela ne fonctionne pas, la paire id-cid n'est pas insérée correctement


Aucune erreur, juste les enregistrements ne sont pas insérés comme prévu.


Alors à quoi vous attendez-vous? Et que se passe-t-il?


C'était mon erreur de condition WHERE dans SELECT. Fonctionne bien comme prévu.



2
votes

Vous pouvez essayer quelque chose comme:

INSERT into website_preferences ( cid, website_id, key, value, is_preview, updated_by, updated_on, created_by, created_on, details )
SELECT w.id,w.cid,'NEIGHBORHOOD_GOOGLE_PLACES', 'airport, gas_station, supermarket, gym', 123, NOW(), 123, NOW(), NULL FROM websites w WHERE deleted_by IS NOT NULL


1 commentaires

Je ne sais pas pourquoi cela ne fonctionne pas, la paire id-cid n'est pas insérée correctement