我有一个表tbl_english,其中包含“word”列。 我还有一个表tbl_translation,其中包含“german_word”和“english_word”列。
tbl_translation应该是一个查找表,以查看tbl_english'列中是否有任何德语单词“word”
所以我想做的是;
对于每个tbl_english.word,迭代 tbl_translation.german_word并查找匹配值。如果匹配 存在,使用值in更新tbl_english.word 来自tbl_translation
中当前行的tbl_translation.english_word
目的是用查找表中的正确翻译替换tbl_english中存在的任何流氓德语单词tbl_translation
到目前为止,我想出的是这个;
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ädchen 弗劳 男孩 长颈鹿 Baum的
tbl_translation包含(德语,英语); Mädchen,女 Frau,女性
所以在tbl_english中我希望看到以下结果; 女 女 男孩 长颈鹿 Baum的
编辑:并非tbl_english中的每个单词都会在转换表中包含引用行。 Edit2:添加了示例
答案 0 :(得分:7)
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;
答案 1 :(得分:1)
您是否尝试为子表使用别名?
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)
我希望我没有误解你的问题。