我有一张包含数据的表格。通常,值是正确的,但有时我们需要修改它们。修改保存在第二个表中。
我想创建一个动态替换替换表中存在的值的查询。
这是我的查询设计看起来像但它不起作用:
这是我的查询代码:
[emiliano@dev ~]# gulp script --module=module1 --minify
我的逻辑错误在哪里?它不会取代值。我认为它与所有在没有OR的情况下的连接有关,但OR对于性能来说太昂贵了。
任何有更好主意的人?
答案 0 :(得分:2)
看起来你想要做的是用替换表中出现的值替换每个值,但是你有三个单独的列,并且这三个值中的每一个在替换表中都有不同的对应条目。因此,您必须在三个不同的时间链接到该表,每个值一次,链接到其替换,如:
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
重要的是,您的替换表在wert_alt上有索引,以便可以有效地完成这些链接。
另一种可能性是将替换值实际存储在主数据表中。所以它的字段是:
bez1
bez1Replacement
bez2
bez2Replacement
...
可能在表上有一个触发器,以便在任何插入或更新时,触发器从替换表中查找三个替换值中的每一个,并将它们添加到主数据记录中。这不会完全正常化,但它会加快您的查询速度。但是,你可能根本不需要这样做。如果你有这个索引,上面的查询可能足够有效。