数学可以帮助通过卡诺图在SQL中制定更新查询吗?

数学可以帮助通过卡诺图在SQL中制定更新查询吗?,sql,boolean-logic,karnaugh-map,Sql,Boolean Logic,Karnaugh Map,我有一个数据库,有两个表。让我们调用它们table和table with updated values 表结构相同,它们只有很少的列:标题、绘图和回顾表格还更新了一列 这两个值都可以假定为NULL,即1和2 Null = '' = string.empty != 1 Null = '' = string.empty != 1 Null = '' = string.empty != 2 1 != 2 我想将值从带有UpdatedValues的表格复制到表格,并在除一个以外的所有情况下将更新标志设

我有一个数据库,有两个表。让我们调用它们tabletable with updated values

表结构相同,它们只有很少的列:标题绘图回顾表格还更新了一列

这两个值都可以假定为NULL,即1和2

Null = '' = string.empty != 1
Null = '' = string.empty != 1
Null = '' = string.empty != 2
1 != 2
我想将值从带有UpdatedValues的表格复制到表格,并在除一个以外的所有情况下将更新标志设置为1:当两个表格上的绘图值或审阅值不同且目标表格值不为空时。在行为上也存在差异:如果值不同,但是表中的值与updatedValues为空,我将保留表中的值

这个概念非常简单直观。Null是一个不可用的值。1和2具有相同的值。我永远不会用null覆盖1或2,并且在用2或反之亦然覆盖1时会有冲突(因此我不会覆盖)

我意识到这张桌子很简单

示例数据
这应该是你想要的

update @myTable
set updated = 0

update t
set plot = ut.plot
    , updated = 1
from @myTable t
inner join @myUpdatedTable ut on ut.title = t.title
where ((t.plot is null or t.plot = '')
        or t.plot = ut.plot)
and ((t.review is null or t.review = '')
        or t.review = ut.review)


注意:因为您没有指定RDBMS,所以我在SQLServer2008中指定了它。如果它不起作用,应该使用类似的方法。

您使用的是哪个RDBMS(以及哪个版本)?如何知道表中哪个记录与表中的给定记录相对应?是否有外键和/或id可供使用?也许发布一些示例数据会有所帮助。对不起,我忘了还有一个名为title的列,它是PK。我正在考虑使用NVL函数..谢谢!只有一个问题。。我也必须为审查做同样的操作。如果绘图或审查存在冲突,我将手动处理该行,在另一种情况下,我希望更新该行。。它类似于定义2个变量:UpdateableForPlot和UpdateableForReview,并且仅当这两个变量都为真时才进行更新。但是我认为你的建议把我引向了正确的道路。。所有字段均不为空。@我已根据您的评论更新了我的答案。在where子句中添加多一点就可以了。谢谢。在处理真实数据时,我发现了另一个问题。有时ut上的数据为空,并在t上赋值。在这种情况下,我将用NVL(ut.plot,t.plot)替换ut.plot,但这有点烦人,因为数据不是空的,但可以是“”,所以NVL将不起作用(我在MySQL 5上)@Revious您可以在where子句中添加一个部分,说明“and ut.plot!=”,ut.plot不是空的,ut.review!=“,ut.review不是空的”。这样,这些行不会在更新中被考虑。但是我想考虑它们。想象一下,我有要更新的评论和不更新的情节。我只想在查看时更新记录,保留旧绘图并将更新设置为1。
update @myTable
set updated = 0

update t
set plot = ut.plot
    , updated = 1
from @myTable t
inner join @myUpdatedTable ut on ut.title = t.title
where ((t.plot is null or t.plot = '')
        or t.plot = ut.plot)
and ((t.review is null or t.review = '')
        or t.review = ut.review)