代码之家  ›  专栏  ›  技术社区  ›  Josh

通过连接多个表来更新表

  •  4
  • Josh  · 技术社区  · 16 年前

    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 对我来说,这是“318强”

    编目文件ID 属于 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'
    
    3 回复  |  直到 16 年前
        1
  •  0
  •   too much php    16 年前

    只需替换“ 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>

    编辑: 删除了多余的逗号。..

        2
  •  0
  •   David Andres    16 年前

    最好开始一个事务,并分别更新每个表。SQL更新语句意味着每条语句影响一个表。

        3
  •  0
  •   ndp    16 年前
    1. 识别所有将此ID作为外键的表

    2. 更新类别文件集catalogFileID='cfil123',其中类别FileID='cfil960'; 更新编目文件_连接集编目文件ID='cfil123',其中categoryFileID='sfil960' 等等

    这将更新对类别文件的所有引用,这可能不是您想要的。