2017-12-21 15 views
-1

에 가입 : LANG두 외래 키는 내가 3 개 테이블 MySQL 데이터베이스가 WHERE 절

         을 LANG_ID

언어를

단어
word_id       0 12,385,는           단어

번역
trans_id         word_id1     word_id2

LANG_ID 그리고 나는 내가 선택한 두 언어 사이의 모든 번역을 얻을합니다. 명령에
Two foreign keys of the same table. How do I write this SELECT statement?
MySQL multiple Inner Join with Where clause

내가 언어 사이의 번역을 얻으려고 : (잘못된 구문) 명령 에 따라이 기준으로합니다.

SELECT w1.word, lang1.lang AS w2.word, lang2.lang AS FULL 
    FROM translation AS trans 
    (JOIN (word AS w1 JOIN language AS lang1 ON lang1.id_lang=w1.lang_id) 
     ON trans.word_id1=w1.id_word WHERE (w1.lang_id=1 OR w1.lang_id=2)) 
    (JOIN (word AS w2 JOIN language AS lang2 ON lang2.id_lang=w2.lang_id) 
     ON trans.word_id2=w2.id_word WHERE (w2.lang_id=1 OR w2.lang_id=2)) 

에 해결 감사합니다 @ 아메드-gdoma 내가이 명령을 함께했다 :

SELECT w1.word AS w1, l1.lang AS L1,w2.word AS w2, l2.lang AS L2 FROM translation AS t 
JOIN word AS w1 on w1.id_word=t.word_id1 
JOIN word AS w2 on w2.id_word=t.word_id2 
JOIN language AS L1 on w1.lang_id=L1.id_lang 
JOIN language AS L2 on w2.lang_id=L2.id_lang 
WHERE (l2.id_lang=1 OR l2.id_lang=2) 
AND (l1.id_lang=2 OR l1.id_lang=1) 

그것은 반환 단어 (W1), 그 언어 (L1), 번역 단어 (w2) 및 번역 언어 (L2)

+0

중복 [두 개의 서로 다른 열에 대한 또 다른 SQL 테이블에서 데이터를 일치 얻는 방법 : 내부 가입 및/또는 연합?] (https://stackoverflow.com/q/27682228/3404097) – philipxy

+0

당신 "두 개의 특정 언어 사이의 모든 번역"과 "언어 1과 2 사이의 번역 가져 오기"라는 두 가지의 명확하지 않은 설명을 제공하고이를 수행하지 않는 쿼리를 제공합니다. 네가 원하는 걸 어떻게 알았지?예제 DDL, 입력 매개 변수 및 표 및 원하는 출력을 제공하고 영어를 사용하여 예제에 의존하지 않는 방식으로 원하는 것을 설명하십시오. [mcve]를 읽고 행동하십시오. 추신 : [PKs, FK 및 기타 제약 조건을 쿼리하는 데 필요하지 않습니다.] (https://stackoverflow.com/a/23842061/3404097) – philipxy

+0

안녕하세요. "작동하지 않는다"는 것은 무엇을 의미합니까? 이 쿼리는 구문 분석을하지 않습니다. 설명서 또는 모든 소개의 SELECT 문 구문을 읽으십시오. 귀하의 가장 안쪽 괄호는 불필요하며 귀하의 다른 괄호는 불법적으로 그룹화됩니다. 하위 쿼리 (테이블 이름을 사용할 수있는 select)에는 괄호와 별칭이 필요합니다. 그러나 일련의 조인을 할 수 있기 때문에 하위 쿼리가 필요하지 않습니다. 별도로 작업 할 수있는 부분부터 쿼리를 작성하십시오. – philipxy

답변

0

문제는 MySQL에서 FULLreserved keyword이며, 따라서 AS에 대해 다른 이름을 지정해야합니다. 다음에

, 나는 COMBINED와 이것을 대체 :이 도움이

SELECT w1.word, lang1.lang AS w2.word, lang2.lang AS COMBINED 
FROM translation AS trans 
(JOIN (word AS w1 JOIN language AS lang1 ON lang1.id_lang=w1.lang_id) 
    ON trans.word_id1=w1.id_word WHERE (w1.lang_id=1 OR w1.lang_id=2)) 
(JOIN (word AS w2 JOIN language AS lang2 ON lang2.id_lang=w2.lang_id) 
    ON trans.word_id2=w2.id_word WHERE (w2.lang_id=1 OR w2.lang_id=2) 

희망! :)의

+0

나는 'AS'를 없애고 추천대로 'FULL'을 'COMBINED'로 바꿨습니다. 슬프게도 여전히 작동하지 않습니다. –

+0

@ObsidianAge AS는 표준 SQL의 FROM & SELECT에서 모두 선택 사항입니다. 또한 여기에 태그 된 MySQL. – philipxy

0
SELECT w1.word AS L1,w2.word as L2 FROM translation AS t 
JOIN word AS w1 on w1.word_id=t.word_id1 
JOIN word AS w2 on w2.word_id=t.word_id2 
+0

고마워요.이게 내가 요구 한 것이 아니고, 올바른 명령으로 이어졌습니다. 당신의 명령은 단어 만 반환하고, 나는 단어 + 언어를 원했습니다. 여기에 내가 생각해 낸 것입니다 : '선택 w1.word AS w1, l1.lang AS L1, w2.word AS W2, l2.lang AS L2 FROM 번역 AS t w1.id_word = t에서 조인 단어 AS w1. word_id1 w2id_word = t.word_id2에서 단어 w2를 조인하십시오. w1.lang_id = L1.id_lang의 단어 L1을 조인하십시오. 의 언어로 L2를 조인하십시오. w2.lang_id = L2.id_lang ' –