2011-08-20 4 views
2

다가오는 모든 이벤트를 표시하고 현재 사용자의 일기에있는 이벤트를 표시해야하는 웹 페이지와 관련이 있습니다.간단한 SQL 조인에 대한 문제

일기 테이블
diary_id
MEMBER_ID
EVENT_ID

이벤트 테이블
EVENT_ID

...

영역 TABL을 REGION_ID

SELECT event.*, region.name, diary.diary_id 
FROM event, region 
LEFT JOIN diary on diary.member_id = 10 AND diary.event_id = event.event_id 
WHERE region.region_id = event.region_id AND `date` >= NOW() 

이 반환 알 수없는 열 event.event_id 및 I : 전자

...

멤버 테이블
MEMBER_ID
...

QUERY를 REGION_ID 이유를 알 수 없습니다. 나는 SQL Whiz가 아니지만 이것이 작동하고 사용자 다이어리에없는 모든 이벤트에 대해 diary_id 열에 NULL을 제공 할 것으로 예상합니다.

+0

당신이 코드로 포맷 실제 전체 오류 메시지를 포함하는 게시물을 편집 할 수 있습니까? –

+1

이벤트 ID 열의 이름이 'event_id'입니까? MySQL 클라이언트를 시작하고'describe event; '를 입력하면 어떻게 될까요? –

답변

3

구문은 join입니다. 대신이 방법을 사용해보십시오.

SELECT event.*, 
     region.name, 
     diary.diary_id 
FROM event 
     INNER JOIN region 
     ON region.region_id = event.region_id 
     LEFT JOIN diary 
     ON diary.member_id = 10 
      AND diary.event_id = event.event_id 
WHERE `date` >= NOW() 

업데이트event_id을 찾지 못하는와

귀하의 문제는이 FROM event, region이다. on 절에 event_id을 찾을 수 없습니다. 위에서 제안한대로 쿼리를 변경하십시오. 그러나 표의 위치를 ​​FROM region, event으로 전환하여 문제를 해결할 수도 있습니다. 그러지 마. 약 20 년 전에 SQL 언어에 도입 된 새로운 조인 구문을 사용하십시오.

나는에 diary.member_id = 10을 넣어하지 않을 모든
+1

+1. 기본적으로 쉼표로 구분 된 테이블 목록 다음에 JOIN 절이 오는 경우 모든 항목이 아니라 바로 앞에있는 테이블 만이 조인에 참여합니다.즉,이 두 종류의 연산자 인 쉼표 결합과 JOIN 절 사이에서, 후자는 전자보다 우선합니다. –

+0

감사합니다. 일했다. 나는 아마도 조인에 대해 좀 더 배울 필요가 있습니다 .- – gio

0

먼저 가입 : 당신은 event.event_idevent.id가 아닌지 확인

SELECT event.*, region.name, diary.diary_id 
FROM `event`, region 
LEFT JOIN diary ON diary.event_id = event.event_id 
WHERE region.region_id = event.region_id AND `date` >= NOW() AND diary.member_id = 10 

있습니까?

+1

'diary.member_id = 10'을 where 절로 이동하면 더 이상 '일기'에 대한 왼쪽 외부 조인을 수행하지 않습니다. 결과는 동일하지 않습니다. –

0

왼쪽 결합을 원하면 diary.member_id = 10을 where 절에 넣지 마십시오. PL/SQL에서 이것은 당신에게

(가) 아래해야 묻지 않고 당신의 조인에 참여 좌회전합니다 더 나은 :

SELECT event.*, region.name, diary.diary_id 
FROM event 
JOIN region on region.region_id = event.region_id 
LEFT JOIN (select diary_id, event_id 
       from diary 
      where diary.member_id = 10) diary 
     ON diary.event_id = event.event_id 
WHERE `date` >= NOW()