2012-02-29 4 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 포함; 소녀 프라우 보이 기린 바움

tbl_translation 포함 (독일어, 영어); 남성, 여성 여성, 여성,

그래서 tbl_english에서 나는 다음과 같은 결과를보고 싶습니다. 여성 여성 보이 기린 바움

편집 : tbl_english의 모든 단어가 번역 테이블의 참조 행을하지 않습니다. 편집 2 : 예제 추가

+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

나는 그것을 생각했지만 매번 같은 값을 추가 할 것이다. 가짜 독일어 단어가 1 건 있거나 고유 한 단어가 100 개나있을 수 있습니다. 이것은 후자의 시나리오를 다루지는 않을 것입니다. – cc0

관련 문제