2012-02-29 28 views
4

我有一个表tbl_english,其中包含“word”列。 我也有一个表,tbl_translation,包含列“german_word”和“english_word”。SQL - 根据查找表中的参考数据更新行

tbl_translation应该是一个查找表,看是否有任何tbl_english德语单词”列‘字’

所以我想要做的是;

对于每个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 contains; Mädchen 弗劳 男孩 长颈鹿 的Baum

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

所以在tbl_english我想看到下面的结果; 女 女 男孩 长颈鹿 鲍姆

编辑:未tbl_english每一个字都会有转换表中的引用行。 编辑2:添加示例

+0

也许你应该举个例子。如果一个英语单词可以有多个德语等值,你需要定义你想要的哪一个,也许你可以展示如何识别一个“流氓”单词。这只是tbl_translation中根本不存在的一个吗?如果它是在那里但是是不同英语单词的翻译呢? – 2012-02-29 19:15:42

+0

请假设多个独特的德语单词可以翻译成一个英文单词。一个独特的德语单词永远不会有多个翻译。 此外,识别'流氓'词的唯一方法是,如果它存在于tbl_translation中 – cc0 2012-02-29 19:17:58

+0

您的编辑没有意义。如果tbl_english中的单词在tbl_translation中没有一行,您选择哪个德语单词?最有趣的一个?请显示一些示例数据。 – 2012-02-29 19:19:20

回答

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; 
+0

这假设每个英语单词也存在于翻译表中。不幸的是,事实并非如此。我的原因是没有在原文中指定。将编辑。欣赏输入虽然。 – cc0 2012-02-29 19:15:42

+2

这没有任何意义。如果英文单词不在翻译表中,那么您如何选择使用哪个德语单词?轮盘赌?画一张卡片? – 2012-02-29 19:17:10

+0

这是一个问题隐喻=]我意识到它不是一个密封的;但是,请随它去。 – cc0 2012-02-29 19:22:48

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) 

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

+0

我想到了,但每次都会增加相同的值。可能有1个流氓德语单词的实例,或者可能有100个独特的单词。这不会涵盖后一种情况。 – cc0 2012-02-29 19:13:00