繁体   English   中英

SQL - 根据查找表中的引用数据更新行

[英]SQL - Updating rows based on reference data in lookup table

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

tbl_translation应该是一个查找表,以查看tbl_english'列中是否有任何德语单词“word”

所以我想做的是;

对于每个tbl_english.word,迭代tbl_translation.german_word并查找匹配值。 如果匹配,则使用tbl_translation中当前行的tbl_translation.english_word中的值更新tbl_english.word

目的是用查找表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包含; MädchenFrau男孩长颈鹿鲍姆

tbl_translation包含(德语,英语); Mädchen,女Frau,女

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

编辑:并非tbl_english中的每个单词都会在转换表中包含引用行。 Edit2:添加了示例

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;

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

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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM