通过 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 中查找三个替换值中的每一个并将它们添加到主数据记录.这不会完全标准化,但会加快您的查询速度。但是,您可能根本不需要这样做。如果你有那个索引,上面的查询可能足够有效。
我有一个 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 中查找三个替换值中的每一个并将它们添加到主数据记录.这不会完全标准化,但会加快您的查询速度。但是,您可能根本不需要这样做。如果你有那个索引,上面的查询可能足够有效。