0

我有一个包含 2 个表的数据库。让他们称他们为tabletableWithUpdatedValues

表结构是相同的,它们只有几列:titleplotreview也​​更新了一个列。

两者都可以假设的值是 NULL、1 和 2。

Null = '' = string.empty != 1
Null = '' = string.empty != 1
Null = '' = string.empty != 2
1 != 2

我想将值从tableWithUpdatedValues复制到并将更新标志设置为 1 在所有情况下,除了一个:当两个表上的绘图值或审查值不同并且目标表值不为空时。行为也有区别:如果值不同,但tableWithUpdatedValues上的值为 null 我将保留table上的值

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

在此处输入图像描述

http://en.wikipedia.org/wiki/Karnaugh_map

我意识到这张桌子是对称的

示例数据

Title: Vajont
Plot on table = ''
Plot on tableWithUpdatedValues = 'Nice movie'
Result wanted on table:
plot = 'Nice movie'
updated = 'true'

Title: Lost in Translation
Plot on table = 'Nice movie'
Plot on tableWithUpdatedValues = 'Very nice movie'
Result wanted on table:
plot = 'Nice movie'
updated = 'false'
4

1 回答 1

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)

SQL小提琴

注意:因为您没有指定 RDBMS,所以我在 SQL Server 2008 中做了。如果它不起作用,应该做类似的事情。

于 2014-10-30T15:18:28.733 回答