【问题标题】:Copying sql table contents from one table to another - conditionally将 sql 表内容从一个表复制到另一个表 - 有条件
【发布时间】:2013-03-20 04:09:14
【问题描述】:

我有 2 张桌子 positions - 包含一个名为“tripname”的字段 trips - 包含一个名为“name”的字段

我使用 csv 文件将数据导入到这两个表中,现在我需要做一些进一步的更新,但有点卡住了。

positions”表通过添加与 csv 文件中包含的行数一样多的行进行更新。一个字段称为“tripname”(其中包含一个值),另一个字段称为“FK_Trips_ID”(添加为 NULL)。

trips”表只更新了一行(如果它不存在的话),其中包含一个名为“name”的字段和另一个名为“ID”的字段。

这就是我卡住的地方。我需要:

Insert into the 'positions.FK_Trips_ID' field the value of the 'trips.ID'
where the 'trips.name' is equal to the 'positions.tripname
- BUT only if 'positions.FK_Trips_ID' is NULL

我找不到此类插入的类似示例,想知道是否有好心人可以为我指明正确的方向。

【问题讨论】:

    标签: php mysql sql join sql-update


    【解决方案1】:

    我认为您的意思是根据trips 表上的匹配记录,从表positionsUPDATEFK_Trips_ID

    您可以同时加入两个表以在数据库上只有一个请求,

    UPDATE  positions a
            INNER JOIN trips b
                ON a.tripname = b.name
    SET     a.FK_Trips_ID = b.ID
    WHERE   a.FK_Trips_ID IS NULL
    

    为了更快地执行UPDATE 语句,列必须是索引以避免执行全表扫描,这会导致在大型数据库上执行此操作时变慢。

    ALTER TABLE positions ADD INDEX (tripname);
    ALTER TABLE trips ADD INDEX (name);
    

    【讨论】:

    • 感谢 JW - 非常感谢您的回复。我看到了“插入”和“更新”之间的逻辑和区别。如果可以,还有一个问题。在“trips”表中,还有一个字段“FK_Users_ID”。如果我想同时在“职位”表中更新这个(相同的条件) - 这将如何影响您的陈述。
    • 没关系 JW - 经过几次尝试,我明白了。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多