我已经创建了一个更新程序,如果另一个表中的匹配记录发生了变化,它将更改表中记录的值,但是,我如何设置它是因为即使有12个字段也是如此可以更新,即使只有1个字段被更改,该过程也会更新它们中的每一个
这是因为效率低,只需要1个记录大约需要50秒,如果有几百个则不好,我想起了这个容易的psudocode
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语句,它将像这样工作
答案 0 :(得分:3)
我不确定我是否完全理解您要更新的内容,但是您最好在单个语句中执行此操作并将IF合并到WHERE子句中。
UPDATE updatetable u
SET ... something ...
WHERE EXISTS ( SELECT 1 FROM originaltable o WHERE o.primarykey = u.primarykey AND ... )
但是如果你在两个表中存储相同的字段,你确定这是你的表的最佳数据库设计吗?
答案 1 :(得分: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
希望这有帮助。