2016-10-19 2 views
0

테이블이 t, 900-9500입니다. 내 작업의 목적을 위해, 나는 다음과 같은 것을 할 필요가있다. (이 유형의 쿼리 뒤에 이유를 넣으려는 시도에 의미가 없다고 생각한다.) ID는 고유하지 않다. 다소 외래 키라고 말하자)!MySQL UNION은 존재하지 않는 ID를 반환합니다.

SELECT DISTINCT(t5.id) FROM (
SELECT DISTINCT(t1.id) FROM t t1 WHERE {...} 
    UNION SELECT DISTINCT(t2.id) FROM (
     SELECT DISTINCT(t0.id) FROM t t0 WHERE {...}) as t2 
     INNER JOIN t t3 ON t2.id=t3.id WHERE{...} 
    UNION SELECT DISTINCT(t3.id) FROM t t4 WHERE {...}) 
t5 ORDER BY t5.id 

문제 쿼리가, 지금까지 900 기존의있는 ID를 반환합니다. 10.000-20.000 이상으로 이동하십시오. 필요한 정보를 모두 제공하도록 도와주세요.

+0

을하지만, 아마도 당신은에 id'으로'추가해야 두 번째 선택 필드는 아래 답변과 같습니다. –

+0

네가 맞다. 내가 제공 한 예문은 문법 오류가있어 편집 할 것이다. 문제는 결과와 관련이 있지만 단순화 된 예제의 구문은 아닙니다. – Orestes

+0

솔직히, 나는 당신이 문제의 일반화를 정확하게 번역하지 않았다고 생각합니다. 당신은 중복을 제거하고 독특한 ... 조합을 사용하고 있습니다 이것은 당신이 최대 900 결과를 가질 수 있음을 의미합니다. 마음에 오는 첫 번째 아이디어는 당신이 당신의 모범을 정확하게 번역하지 않았다는 것입니다. – hummingBird

답변

0

는 잘 모르겠지만, 아마 당신은 다음과 같이 두 번째 선택 필드에 as id을 추가해야 잘 모르겠어요

SELECT DISTINCT(id) FROM (SELECT DISTINCT(t1.id) **as id** FROM t t1 WHERE {...} UNION SELECT DISTINCT(t2.id) FROM t t2 WHERE {...} INNER JOIN t t3 ON t2.id=t3.id WHERE{...} UNION SELECT DISTINCT(t3.id) FROM t t4 WHERE {...}) t5 ORDER BY t5.id 
+0

이고'DISTINCT (id)'대신에'DISTINCT (t5.id)'라는 접두사를 추가해야합니다. 하지만 당신이 옳았다 고해도, 다른 오류 메시지가 나타날 것입니다. – DanFromGermany

+0

둘 다 감사합니다. 내가 여기에서 타이핑 할 때 내가 놓친 뭔가 였기 때문에 나는 그 질문을 편집했다. t5.id는 이미 그곳에 있습니다. 오류에 관해서는, 내가 아주 이상한 것을 눈치 채는 것은 처음이기 때문에 나는 크게 혼란스러워합니다. 물론 그것은 정말 이상한 쿼리이지만 여전히 내 지식에는 의미가 없습니다. – Orestes

관련 문제