2011-09-21 2 views
1

내 SELECT 문을 가입 일치하지 않는 모든 결과를 선택하는 방법을 근본적으로 그러나MySQL은 : LEFT는

SELECT *, user.user, response.survey FROM survey, user, response ORDER BY survey.added 

, 내가 답을하지 않은 경우에만 설문 조사를 선택하려합니다. '응답'테이블에는 4 개의 관련 칼럼 (설문에 응답하는 사용자의 사용자 ID, 답변, 질문 [단일 질문 인 경우 설문 ID, 질문 ID와 일치하는 경우 설문 ID와 동일] 및 조사 ID와 동일)

임의의 사용자 ID ($ _SESSION [ 'userId'])의 응답이없는 모든 설문 조사를 선택하는 SQL 문을 작성하려고합니다 ... 다양한 LEFT JOIN과 중첩 된 SELECT 명령을 사용하여이 작업을 시도했습니다. , 그러나 그것을 알아낼 수 없었다.

누구든지이 문제를 해결하는 방법에 대해 설명해 줄 수 있습니까?

SELECT *, user.user, response.survey FROM survey, user, response ORDER BY survey.added 

가가 (사용자 응답 및 설문 조사의 모든 가능한 조합을 얻는) - 크로스에 참여하고있다 그리고 그것은 분명히 데이터가 테이블 사이에 참조하는 방식이 아니다;

+0

테이블 정보 및 예제 데이터를 보내주십시오. –

답변

0

이 Select 문 당신이 쓴 따라서 잘못되었습니다. 공통 키로 3 개의 테이블을 조인해야합니다.

귀하의 질문에 대답하는 그러나

... 특정 사용자의 응답이있는 테이블이 있다면

; 다음과 같이 수행하십시오.

select * from survey s where s.survey_id not in (
select survey_id from response where userId=<particular_user_id>) 
and s.user_id=<particular_user_id> 

그러면 사용자가 응답하지 않은 모든 설문 조사가 반환됩니다.

아이디어가 명확 해지기를 바랍니다. 다만 가입 널 위해 오른쪽에 열을 확인 왼쪽

1

또는 :

SELECT *, user.user, response.survey FROM user 
LEFT JOIN response ON response.user=user.user 
LEFT JOIN survey ON survey.surveyID=response.surveyID 
WHERE user.user=[userID from session] AND response.user IS NULL ORDER BY survey.added 

응답 테이블에서 일치하는 열이없는 경우, response.user는 NULL 것 때문에

.