2014-03-31 4 views
0

3 개의 MySQL 테이블에서 데이터를 선택하는 데 문제가 있습니다.MySQL 여러 조건이있는 3 개의 테이블 중에서 선택하십시오.

SELECT table1.id as UserID, table1.gender, table1.land, table1.dob, table1.category_id, table1.is_participant, table2.* 

내가 사용하고자하는 조건은 다음과 같습니다 :

WHERE table1.id = table2.user_id 
OR table3.id = table2.responder_id 

그래서 내가 사용하려고 전체 쿼리는 다음과 같습니다

SELECT table1.id as UserID, table1.gender, table1.land, table1.dob, table1.category_id, table1.is_participant, table2.* 
FROM table1, table2, table3 
WHERE table1.id = table2.user_id 
OR table3.id = table2.responder_id 

나는 다음과 같은 열을 표시하려면

이 쿼리에 어떤 문제가 있습니까? 어떤 이유로이 쿼리를 요청할 때마다 프로세스가 종료되지 않습니다.

도움 주셔서 감사합니다.

+0

sqlfiddle.com에 테이블과 데이터를 추가하고 질문에 예상되는 결과를 추가 할 수 있습니까? –

+0

죄송합니다. 제가 일하는 회사의 개인 정보입니다. – Alberto

+2

@AbhikChakraborty는 샘플 데이터를 의미합니다. 실제 데이터가 아님 :) –

답변

1

조인을 명시 적으로 :

FROM table2 
    LEFT JOIN table1 ON table1.id = table2.user_id 
    LEFT JOIN table3 ON table3.id = table2.responder_id 
WHERE table1.id IS NOT NULL OR table3.id IS NOT NULL; 

당신이 OR 피연산자를 가지고 있기 때문에 당신이 여기 LEFT JOIN를 사용해야합니다 :이 방법은 모든 레코드를해야합니다 테이블을 작성한 다음 WHERE ... OR을 수행하십시오.

튜토리얼 here

1

Never ends는 쿼리 synthax가 올바르게 엔진에서 올바르게 구문 분석되었지만 실행 속도가 느린 것을 의미합니다. 얼마나 많은 데이터가 그 테이블에 있습니까?

해당 테이블의 인덱스와 데이터 구조 최적화를 살펴보십시오. 그러나이 방법으로 조인 사용해보십시오 : 내가 사용하는 것이 좋습니다

SELECT table1.id as UserID, table1.gender, table1.land, table1.dob, table1.category_id, table1.is_participant, table2.* 
FROM table1 
JOIN table2 ON table1.id = table2.user_id 
JOIN table3 ON table3.id = table2.responder_id 
0

사용이 코드 조인에 :

SELECT 
table1.id as UserID, 
table1.gender, 
table1.land, 
table1.dob, 
table1.category_id, 
table1.is_participant, 
table2.*, 
table3.* // you not mention the table3 field, i just mention the all fields 
FROM table1 
join table2 
on table1.id = table2.user_id 
join table3 
on table3.id = table2.responder_id 

참고 : 내가 한 의심했다, 당신은 field name을 언급하여 table3를 사용하지만를 .

+0

내 대답을보고, 동시에 한 의심,'table3'을 사용하지만'필드 이름'을 언급하지 않았다. – jmail

0

귀하의 질문은 막연합니다. 먼저 귀하가 성취하려는 것을 말하십시오. 나는 당신이 추가 한 OR 조건 때문에 시간이 많이 걸리는 방식으로 당신의 질문이 잘못되었다고 생각합니다.

FROM table1, table2, table3을 쓰면 MySql이 세 테이블의 모든 행에 대한 모든 순열을 포함하는 임시 테이블을 만들어야한다는 것을 의미합니다. 그 이유는 MySql이 적절한 WHERE 조건을 추가하여 만들어야하는 순열의 수를 제한하는 이유입니다.

OR 대신 OR 조건을 추가해야한다고 생각합니다.

더 빠른 결과를 원하면 table1.id, table2.user_id, table3.id 및 table2.responder_id가 색인화되어 있는지 확인하십시오.

관련 문제