2009-09-08 4 views
0

je la requête suivante:inverse Engneering une requête

SELECT a.catalogID, d.catalogFileID, e.catalogFileID 
FROM catalog_topics a 
LEFT JOIN catalog_files_join b ON a.catalogID = b.foreignKey 
LEFT JOIN catalog_files_join c ON c.foreignKey = b.catalogFileID 
LEFT JOIN catalog_files d ON d.catalogFileID = c.catalogFileID 
LEFT JOIN catalog_files e ON e.catalogFileID = b.catalogFileID 
WHERE b.fileTypeID = 'gvl401' 
AND c.fileTypeID = 'gvl25' 
AND a.topicID = 'top312' 
ORDER BY a.sortOrder; 

qui renvoie les résultats suivants:

88 cfil923  cfil922 
89 cfil925  cfil924 
91 cfil929  cfil928 
171 cfil107  cfil1074 

Je veux écrire une instruction d'insertion pour insérer quelques enregistrements de telle sorte que si j'insérer 2 enregistre la requête sélectionnée ci-dessus renvoie 6 enregistrements. Lors de l'insertion, j'aurai accès à tout ce qui est là-dessus où clause et je vais insérer de nouveaux d.catalogFileID et e.catalogFileID

Répondre

1

La requête que vous avez fournie extrait les données de 3 tables distinctes. Une seule requête d'insertion SQL insère uniquement des données dans une seule table. Ainsi, pour ajouter chaque enregistrement au système, vous devez faire au moins 3 insertions par enregistrement. à savoir

Pour un nouveau record de 10, cfil123, cfil456 vous auriez besoin:

INSERT INTO catalog_topics(catalogID, .. other required fields) VALUE(10, other required fields) 
INSERT INTO catalog_files(catalogFileID, .. other required fields) VALUE('cfil123', other required fields) 
INSERT INTO catalog_files_join(catalogFileID, .. other required fields) VALUE('cfil456', other required fields) 

En outre, vous devez envelopper l'ensemble des inserts avec une paire de transaction début/fin afin que soit tous les inserts par record arrive ou aucun d'entre eux se produisent.