我有以下查询:
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;
返回以下结果:
88 cfil923 cfil922
89 cfil925 cfil924
91 cfil929 cfil928
171 cfil107 cfil1074
我想编写一条插入语句以插入一些记录,使得如果我插入2条记录,则上述选择查询将返回6条记录。插入时,我将可以访问where子句中的所有内容,并且将插入新的d.catalogFileID和e.catalogFileID
最佳答案
您提供的查询从3个单独的表中提取数据。单个SQL插入查询将仅将数据插入单个表中。因此,为了将每个记录添加到系统中,您将必须对每个记录至少进行3次插入。即
对于10,cfil123,cfil456的新记录,您将需要:
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)
另外,您应该用开始/结束事务对包装插入集,以便每个记录的所有插入都发生或不发生。
关于sql - 反向工程查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1395208/