【问题标题】:SQL - Updating rows based on reference data in lookup tableSQL - 根据查找表中的参考数据更新行
【发布时间】:2012-02-29 19:04:28
【问题描述】:

我有一个表 tbl_english,其中包含“单词”列。 我还有一个表 tbl_translation,其中包含“german_word”和“english_word”列。

tbl_translation 应该是一个查找表来查看 tbl_english 的“word”列中是否有德语单词

所以我想做的是;

对于每个 tbl_english.word,遍历 tbl_translation.german_word 并寻找匹配值。如果匹配 存在,使用中的值更新 tbl_english.word tbl_translation.english_word 来自 tbl_translation 中的当前行

目的是用查找表 tbl_translation 中的正确翻译替换 tbl_english 中存在的任何流氓德语单词

到目前为止,我想出的是这个;

UPDATE tbl_english SET word = 
    (SELECT english_word FROM tbl_translation 
        WHERE tbl_english.word = german_word) 
    WHERE word IN
        (SELECT german_word FROM tbl_translation
            WHERE tbl_english.word = german_word )

但是,当第一个子选择产生相同或不同单词的多个实例时,这会失败。有没有简单的方法来解决这个问题?

例子:

tbl_english 包含; 马辰 夫人 男生 长颈鹿 鲍姆

tbl_translation 包含(德语、英语); Mädchen, 女 女士,女性

所以在 tbl_english 中我希望看到以下结果; 女性 女性 男生 长颈鹿 鲍姆

编辑:并非 tbl_english 中的每个单词在翻译表中都有参考行。 Edit2:添加示例

【问题讨论】:

  • 也许你应该举个例子。如果一个英语单词可以有多个德语对应词,您需要定义您想要的那个,也许您可​​以展示如何识别“流氓”词。它只是 tbl_translation 中根本不存在的一种吗?如果它存在但有不同英语单词的翻译怎么办?
  • 请假设多个唯一的德语单词可以翻译成一个英语单词。一个独特的德语单词永远不会有多个翻译。此外,识别“流氓”词的唯一方法是它是否存在于 tbl_translation
  • 您的编辑没有意义。如果 tbl_english 中的一个单词在 tbl_translation 中没有一行,你会选择哪个德语单词?最有趣的一个?请展示一些示例数据。
  • 如果参考表中没有单词匹配,那么您将不会选择任何单词。但是,我将发布一个示例 =]
  • 所以我的查询就是这样做的。它会忽略english_word 不在翻译表中的行,并更新那些在翻译表中的行。在抱怨它所做的假设之前,您是否尝试过?

标签: sql sql-server


【解决方案1】:
UPDATE e
  SET word = t.english_word
  FROM dbo.tbl_english AS e
  INNER JOIN dbo.tbl_translation AS t
  ON e.word = t.german_word
  WHERE e.word <> t.english_word;

【讨论】:

  • 假设每个英文单词也存在于翻译表中。不幸的是,事实并非如此。我没有在原始帖子中指定是不好的。会编辑。感谢您的意见。
  • 这没有任何意义。如果英语单词不在翻译表中,那么您如何选择使用哪个德语单词?轮盘赌?抽一张牌?
  • 这是一个问题隐喻 =] 我意识到这不是一个气密的问题;但是,请继续。
【解决方案2】:

您是否尝试为子表使用别名?

UPDATE tbl_english SET word = 
(SELECT TOP 1 t.english_word FROM tbl_translation t WHERE tbl_english.word = t.german_word) 
WHERE word IN
(SELECT TOP 1 t.german_word FROM tbl_translation t WHERE tbl_english.word = t.german_word)

希望我没有误解你的问题。

【讨论】:

  • 我想过,但每次都会添加相同的值。可能有 1 个流氓德语单词的实例,或者可能有 100 个独特的单词。这不包括后一种情况。
猜你喜欢
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多