2012-02-29 7 views
4

私は、テーブル "tbl_english"に "word"という列を含んでいます。 "german_word"と "english_word"という列を含むテーブルtbl_translationもあります。SQL - ルックアップテーブルの参照データに基づいて行を更新する

tbl_translationは

は、だから私は何をしたいですtbl_englishのいずれかのドイツ語の単語」列 『言葉』があるかどうかを確認するためにルックアップテーブルをすることになっています。

各tbl_english.wordについて、 tbl_translation.german_wordまで繰り返し、一致する値を探します。試合 が存在する場合は、

意図がルックアップテーブルtbl_translation

から正しい訳でtbl_english内の既存の任意の不正なドイツ語の単語を置き換えることですtbl_translationに現在の行から tbl_translation.english_wordに値を持つtbl_english.wordを更新

これまで私が思いついたのはこれです。

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フラウ ボーイ キリンバウム

tbl_translationに含まれる(ドイツ語、英語)。 男性、女性 女性、女性

だからtbl_englishで私は次の結果を見たいと思います。 女性 女性 ボーイ キリン バウム

編集:tbl_english内のすべての単語が変換テーブルに参照行を持っているわけではありません。 Edit2:追加例

+0

おそらく例を示す必要があります。英語の単語が複数のドイツ語の同等語を持つことができるなら、あなたはあなたが望むものを定義する必要があり、おそらくあなたは "不正な"単語を特定する方法を示すことができます。それはtbl_translationにはまったく存在しないのでしょうか?それはそこにあるが、別の英語の単語の翻訳は何ですか? –

+0

複数のユニークなドイツ語を1つの英単語に翻訳できるとします。独特の独特のドイツ語は、複数の翻訳を持つことはありません。 また、「不正な」単語を特定する唯一の方法は、tbl_translationに存在する場合のみです。 – cc0

+0

あなたの編集は意味をなさないものです。 tbl_englishの単語にtbl_translationの行がない場合は、どのドイツ語を選択しますか?面白いの?いくつかのサンプルデータを表示してください。 –

答えて

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

+2

これは意味をなさない。英語の単語が翻訳テーブルにない場合、使用するドイツ語をどのように選択しますか?ルーレットホイール?カードを取る? –

+0

これは問題です。私はそれが気密なものではないことを認識しています。しかし、一緒に行ってください。 – cc0

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