2012-02-29 2 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_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 Фрау Мальчик Жираф Баум

tbl_translation содержит (немецкий, английский); Mädchen, Женщина Frau, Женщина

So tbl_english Я хотел бы видеть следующий результат; Женского Женского Мальчик Жираф Baum

Edit: Не каждое слово в tbl_english будет иметь ссылочную строку в таблице перевода. Edit2: Добавлен пример

+0

Возможно, вам следует показать пример. Если английское слово может иметь несколько германских эквивалентов, вам нужно определить, какой из них вы хотите, и, возможно, вы могли бы показать, как идентифицировать слово «изгоев». Это просто тот, который вообще не существует в tbl_translation? Что, если он есть, но есть перевод другого английского слова? –

+0

Предположим, что несколько уникальных немецких слов могут быть переведены на одно английское слово. В одном уникальном немецком слове никогда не будет более одного перевода. Кроме того, единственный способ идентифицировать слово «изгоев» - это если он существует в 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

Я думал об этом, но каждый раз добавлял бы такое же значение. Там может быть один пример изгоев немецких слов, или может быть 100 уникальных. Это не будет охватывать последний сценарий. – cc0

Смежные вопросы