我有以下查询
SELECT e.topicShortName, d.catalogFileID, e.topicID
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 = b.catalogFileID
LEFT JOIN catalog_lu_topics e ON a.topicID = e.topicID
WHERE b.fileTypeID = 'gvl401'
AND c.fileTypeID = 'gvl25'
AND e.parentID = 'top305'
AND a.sortorder =1
AND e.topicID = 'top318'
提取一行数据:
topicShortName catalogFileID topicID
Welcoming cfil960 top318
我想运行一个更新语句,以便我可以将catalogFileID
更新为'cfil123'。我有topicID
和我在一起,它是'top318'
catalogFileID
属于catalog_files
我似乎无法绕过更新语句来实现这一目标。
我不介意做多次更新。但是在更新语句之后,上面的select查询应该返回cfil123。但我不能只更新使用catalogFileID的所有表..
正确的回答:
UPDATE 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 = b.catalogFileID
LEFT JOIN catalog_lu_topics e ON a.topicID = e.topicID
SET d.catalogFileID = 'Cfil123',
b.catalogFileID = 'Cfil123',
c.foreignKey = 'Cfil123'
WHERE b.fileTypeID = 'gvl401'
AND c.fileTypeID = 'gvl25'
AND e.parentID = 'top305'
AND a.sortorder =1
AND e.topicID = 'top318'
答案 0 :(得分:0)
最好开始一个事务并分别更新每个表。 SQL更新语句旨在影响每个语句的一个表。
答案 1 :(得分:0)
标识具有此ID作为外键的所有表
将您的代码包含在交易中
列出个别更新。我无法确切地说出你的架构是什么,但我认为它是:
UPDATE category_files set catalogFileID ='cfil123'其中categoryFileID ='cfil960'; UPDATE catalog_files_join set catalogFileID ='cfil123'其中categoryFileID ='cfil960' 等
这将更新对类别文件的所有引用,这可能不是您想要的。
答案 2 :(得分:0)
只需将“SELECT...FROM
”替换为“UPDATE
”,然后在SET ...
之前添加“WHERE
”条款:
UPDATE 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 = b.catalogFileID
LEFT JOIN catalog_lu_topics e ON a.topicID = e.topicID
SET d.catalogFileID = 'cfil123',
b.catalogFileID = 'cfil123'
WHERE b.fileTypeID = 'gvl401'
AND c.fileTypeID = 'gvl25'
AND e.parentID = 'top305'
AND a.sortorder =1
AND e.topicID = 'top318'
确保使用SET
符号指定要在<table>.<field>
子句中更新哪些表的字段。
编辑:删除了额外的逗号...