【发布时间】: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