通过 table 的方式用替换值替换某些值

Replace certain values by the means of a table with replacement values

我有一个 table 里面有数据。通常这些值是正确的,但有时我们需要修改它们。修改在一秒内保存 table.

我想创建一个动态替换值的查询,如果它们存在于替换 table。

这是我的查询设计的样子,但它不起作用:

这是我的查询代码:

SELECT
  b.Pos,
  b.Posten,
  IsNull(c.Wert_Neu, b.Bez1) AS Bez1,
  IsNull(c.Wert_Neu, b.Bez2) AS Bez2,
  IsNull(c.Wert_Neu, b.Bez3) AS Bez3,
  b.Wert,
  b.Einheit
FROM
  Table_Values b LEFT JOIN
  Table_Replacements c ON b.Bez1 = c.Wert_Alt AND b.Bez2 = c.Wert_Alt AND b.Bez3 = c.Wert_Alt

我的逻辑错误在哪里?它不会替换值。我认为这与没有 OR 的所有连接有关,但 OR 的性能成本太高。

谁有更好的主意?

看起来您想要做的是将每个值替换为替换 table 中出现的值,但是您有三个单独的列,并且这三个值中的每一个都将具有不同的值替换 table 中的相应条目。因此,您必须 link 到 table 三个不同的时间,每个值一次,到 link 到它的替换,例如:

SELECT
  b.Pos,
  b.Posten,
  IsNull(c.Wert_Neu, b.Bez1) AS Bez1,
  IsNull(d.Wert_Neu, b.Bez2) AS Bez2,
  IsNull(e.Wert_Neu, b.Bez3) AS Bez3,
  b.Wert,
  b.Einheit
FROM
  Table_Values b 
  LEFT JOIN Table_Replacements c on b.bez1=c.wert_alt
  LEFT JOIN Table_Replacements d on b.bez2=d.wert_alt
  LEFT JOIN Table_Replacements e on b.bez3=e.wert_alt

您的替代 table 在 wert_alt 上有一个索引很重要,这样 link 就可以高效完成。

另一种可能性是将替换值实际存储在主数据 table 中。所以其中的字段将是:

bez1
bez1Replacement
bez2
bez2Replacement
...

可能在 table 上有一个触发器,以便在任何插入或更新时,触发器从替换 table 中查找三个替换值中的每一个并将它们添加到主数据记录.这不会完全标准化,但会加快您的查询速度。但是,您可能根本不需要这样做。如果你有那个索引,上面的查询可能足够有效。