2013-04-13 2 views
1

가 여기 내보기 창조 행을 반환하지 않습니다 조인 .. 내가 문제가이 두 줄 생각MySQL의보기는 어느 행을 반환하지 않습니다 ..

CREATE VIEW TOP AS 
(
SELECT 
a.USER_ID, a.USER_NAME, a.PASSWORD, a.FIRST_NAME, a.LAST_NAME, a.CONTACT_NUMBER, a.EMERGENCY_NUMBER, a.CITIZEN_SHIP, a.VISA_TYPE, 
b.PLACE_CODE, b.PLACE_NAME, b.AIR_AVAILIBILITY, b.TRAIN_AVAILIBILITY, b.ROAD_AVAILIBILITY, 
c.CLIENT_ID, c.CLIENT_NAME, c.CLIENT_ADDRESS, c.CLIENT_LOCATION, 
d.PROJECT_CODE, d.PROJECT_NAME, 
e.REQUEST_ID, e.REQUEST_STATUS, e.REQUEST_FOR, e.REQUEST_MODE, e.REQUEST_TYPE, e.TRAVEL_FROM, e.TRAVEL_TO, e.TRAVEL_DATE, e.TRAVEL_TICKET_BY, e.ASSIGNMENT_PLACE, 
e.ASSIGNMENT_COUNTRY, e.TRAVEL_PURPOSE, e.ASSIGNMENT_DURATION, e.ASSIGNMENT_START_DATE, e.ASSIGNMENT_ACCOMODATION_BY, e.ACCOMODATION_BILLABLE, e.TRAVEL_BILLABLE, e.ASSIGNMENT_BILLABLE, e.NSHORE_PROJECT_BILLABLE 
FROM USERS a, PLACES b, CLIENTS c, PROJECTS d, REQUESTS e 
WHERE 
a.USER_ID = e.USER_ID 
AND b.PLACE_CODE = e.TRAVEL_FROM 
AND b.PLACE_CODE = e.TRAVEL_TO 
AND c.CLIENT_ID = d.CLIENT_ID 
AND d.PROJECT_CODE = e.PROJECT_CODE 
); 

..

AND b.PLACE_CODE = e.TRAVEL_FROM 
AND b.PLACE_CODE = e.TRAVEL_TO 

동일한 테이블을 두 번 이상 참조하려고합니다. 정말 기본적인 질문을하는 경우 미안 해요. 완전히 새로운 데이터베이스.

+3

당신이 (HTTP A [SQL 바이올린]를 설정 한 경우 우리가 당신을 도울 쉽게 될 것이다 : //sqlfiddle.com/) –

답변

0

장소가 TRAVEL_FROM이고 장소가 TRAVEL_TO 인 경우에 별개의 세부 정보를 얻으려는 것 같습니다. 이를 수행하려면 동일한 별명을 가진 동일한 테이블에 대해 두 번 참여해야합니다. 나는 대체하는거야 당신의 암시 (쉼표로 구분 FROM)이 바람직하고 명시 적 INNER JOIN의 조인 :

CREATE VIEW TOP AS 
(
SELECT 
    a.USER_ID, a.USER_NAME, a.PASSWORD, a.FIRST_NAME, a.LAST_NAME, a.CONTACT_NUMBER, a.EMERGENCY_NUMBER, a.CITIZEN_SHIP, a.VISA_TYPE, 
    /* one set of columns for TRAVEL_FROM, each with its own alias */ 
    b_from.PLACE_CODE AS PLACE_CODE_from, b_from.PLACE_NAME AS PLACE_NAME_from, b_from.AIR_AVAILIBILITY AS AIR_AVAILABILITY_from, b_from.TRAIN_AVAILIBILITY AS TRAIN_AVAILABILITY_from, b_from.ROAD_AVAILIBILITY AS ROAD_AVAILABILITY_from, 
    /* and one set for TRAVEL_TO, each with its own alias*/ 
    b_to.PLACE_CODE AS PLACE_CODE_to, b_to.PLACE_NAME AS PLACE_NAME_to, b_to.AIR_AVAILIBILITY AS AIR_AVAILABILITY_to, b_to.TRAIN_AVAILIBILITY AS TRAIN_AVAILABILITY_to, b_to.ROAD_AVAILIBILITY AS ROAD_AVAILABILITY_to, 
    c.CLIENT_ID, c.CLIENT_NAME, c.CLIENT_ADDRESS, c.CLIENT_LOCATION, 
    d.PROJECT_CODE, d.PROJECT_NAME, 
    e.REQUEST_ID, e.REQUEST_STATUS, e.REQUEST_FOR, e.REQUEST_MODE, e.REQUEST_TYPE, e.TRAVEL_FROM, e.TRAVEL_TO, e.TRAVEL_DATE, e.TRAVEL_TICKET_BY, e.ASSIGNMENT_PLACE, 
    e.ASSIGNMENT_COUNTRY, e.TRAVEL_PURPOSE, e.ASSIGNMENT_DURATION, e.ASSIGNMENT_START_DATE, e.ASSIGNMENT_ACCOMODATION_BY, e.ACCOMODATION_BILLABLE, e.TRAVEL_BILLABLE, e.ASSIGNMENT_BILLABLE, e.NSHORE_PROJECT_BILLABLE 
FROM 
    /* implicit joins replaced with preferred explicit joins */ 
    USERS a 
    INNER JOIN REQUESTS e ON a.USER_ID = e.USER_ID 
    /* Join frist against PLACES for TRAVEL_FROM */ 
    INNER JOIN PLACES b_from ON b_from.PLACE_CODE = e.TRAVEL_FROM 
    /* And again against PLACES for TRAVEL_TO */ 
    INNER JOIN PLACES b_to ON b_to.PLACE_CODE = e.TRAVEL_TO 
    INNER JOIN PROJECTS d ON d.PROJECT_CODE = e.PROJECT_CODE 
    INNER JOIN CLIENTS c ON c.CLIENT_ID = d.CLIENT_ID 
); 
+0

감사합니다. Michael Berkowski. 그것은 작동합니다. –

관련 문제