0

我创建了一个更新过程,如果另一个表中的匹配记录发生更改,它将更改表中记录的值,但是,我如何设置它是即使有 12 个字段可以更新,即使只更改了 1 个字段,该过程也会更新它们中的每一个

这是因为效率低下,仅 1 条记录大约需要 50 秒,如果有几百条记录就不好了,我想出了足够简单的伪代码

if olddata != newdata

    UPDATE!!!

endif

问题是我对 SQL 中的 if 语句几乎没有经验,如果我可以使用 PHP,那么只需运行带有 WHERE 子句的 SELECT 就很容易了,就像上面的 if 语句然后检查它返回的行数(如果为 0,则没有变化)但程序必须只是 SQL,我能想到的最好的就是这个

IF(SELECT o.field FROM originaltbale AS o INNER JOIN updatetable AS u ON o.primarykey = u.primarykey WHERE o.field <> u.field) != 0

     UPDATE!!!

ENDIF

但我怀疑这会起作用,因为我确定 SELECT 不会返回行数,我怎样才能创建一个像这样工作的 if 语句

4

2 回答 2

3

我不确定我是否完全理解您要更新的内容,但是最好在单个语句中执行此操作并将 IF 合并到 WHERE 子句中。

UPDATE updatetable u
   SET ... something ...
 WHERE EXISTS ( SELECT 1 FROM originaltable o WHERE o.primarykey = u.primarykey AND ... )

但是,如果您将相同的字段存储在两个表中,您确定这是您的表的最佳数据库设计吗?

于 2012-08-23T03:35:22.860 回答
2

如果您想知道是否存在满足您的条件的行,则EXISTS可以使用该子句。

-- If the original table doesn't have a record with the state same as that in updatetable
IF NOT EXISTS (SELECT o.field FROM originaltbale AS o INNER JOIN updatetable AS u ON o.primarykey = u.primarykey WHERE o.field <> u.field)
BEGIN

    UPDATE !!!

END

希望这可以帮助。

于 2012-08-23T02:30:07.187 回答