我有以下查询:

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/

10-10 00:48
查看更多