2009-05-25 4 views
1

다른 열에 일치하지 않는 열의 필드를 얻으려면 어떻게해야합니까? 빠른 방법은 MySQL에서 2 열의 차이를 얻으려면

내가 시도 :

SELECT DISTINCT table1.page_title 
FROM table1, table2 
WHERE table1.page_title != table2.page_title 

하지만 그냥 응답 :

SELECT table1.page_title 
FROM table1, table2 
WHERE table1.page_title != table2.page_title 

그것은 중복 분야의 많은 그래서 나는 한 생산하고 있습니다.

도움을 주시면 감사하겠습니다.

P. 미디어 위키의 MWDumper 도구에 대한 제외 목록을 만들 수 있도록이 작업을 수행하고 있습니다. 출력 된 SQL을 가져올 때 현재 Wiki 항목을 덮어 쓰지 않아야합니다.

편집 : 예 그들은 두 가지 다른 테이블입니다. 각 쿼리에는 약 70,000 개 이상의 레코드가 있습니다. 내 쿼리가 왜 느려 집니까? 나는 이유를 알 수 있도록 누군가가 명확히 할 수 있다면 고맙겠습니다 :) 다시 한번 감사드립니다!

+0

무엇 a와 b 명확히하십시오 (table2.page_title)에 인덱스를 추가 할 수 있습니다. 그들은 다른 테이블입니까? 같은 테이블에 두 별칭이 있습니까? –

답변

0

둘 다 "page_title"열이있는 서로 다른 테이블이 있습니까?

그렇다면,이 시도 :

SELECT DISTINCT page_title FROM a 
WHERE page_title NOT IN (SELECT page_title FROM b) 

를 관심있는 모든 (당신은 단지 하나 개의 테이블이있는 경우) 중복을 제거하는 경우, 두있는 그것을 할 수있는 몇 가지 방법이있다 :

SELECT DISTINCT page_title FROM a 

또는

SELECT page_title FROM a 
GROUP BY page_title 

옵션 BY 그룹이 느린이기는하지만 강력 - 당신은 HAVING 클로스를 추가 할 수 있습니다 e 예를 들어 나타나는 제목 만 선택하십시오. 두 배 이상 (주석에 대한 감사 아론 F)

을하는 데 도움이

SELECT page_title FROM a 
GROUP BY page_title 
HAVING COUNT(page_title) > 2 

희망 렉스의 대답에

+0

첫 제안은 Rax에게 일했습니다. 고마워요! :) – alimango

+0

답장을받지 않고 답변을 수락 했으므로 슬픈 일입니다 ... –

0

약간의 개선 :

SELECT DISTINCT a.page_title FROM a 
WHERE a.page_title NOT IN (SELECT DISTINCT b.page_title FROM b) 

을 테이블이 인덱스에 있습니까 그들의 page_title 열? 귀하의 질의에 대한 설명 계획은 무엇입니까?

어쨌든 색인이 필요하다고 상상할 수는 없습니다. 테이블에 70 만 개의 행만 있습니다.

+0

감사합니다. 첫 번째 쿼리에는 반드시 DISTINCT가 있어야합니다. –

0

당신은 조인이 할 수 있습니다 : 그것은 느린 경우

SELECT DISTINCT table1.page_title 
FROM table1 
LEFT JOIN table2 
    ON table1.page_title = table2.page_title 
WHERE table2.page_title is null 

관련 문제