2012-09-24 3 views
0

좋아, 나는 다음과 같이 그들이 내 데이터베이스에 5 개 테이블이 officelocations_tbl state_tbl city_tbl staff_tbl titles_tbl데이터베이스의 모든 테이블에서 데이터를 가져

titles 테이블 만 직원 테이블과 연관된 그러나 다른 사람이되어 모든 내면의 합류. 나는 다양한 mysql 문장을 시도했지만 아무도 titles_tbl을 가져올 수 없다. '절에'알 수없는 열 'staff_tbl.titleID'-

SELECT officelocations_tbl.*,city_tbl.*, state_tbl.* , titles_tbl.*, 
    contact1.firstName AS c1Firstname, contact1.lastName AS c1lastName, 
    contact1.middleInitial AS c1middleInitial, contact1.suffix AS c1suffix, 
    contact1.accredations AS c1accredations, contact1.phone AS c1Phone, 
    contact1.faxNumber AS c1FaxNumber, contact1.mobilePhone AS c1Mobile, 
    contact1.email AS c1Email, contact1.titleID AS c1Title, 

    contact2.firstName AS c2Firstname, contact2.lastName AS c2lastName, 
    contact2.middleInitial AS c2middleInitial, contact2.suffix AS c2suffix, 
    contact2.accredations AS c2accredations, contact2.phone AS c2Phone, 
    contact2.faxNumber AS c2FaxNumber, contact2.mobilePhone AS c2Mobile, 
    contact2.email AS c2Email, contact2.titleID AS c2Title, 

    partner.firstName AS c3Firstname, partner.lastName AS c3lastName, 
    partner.middleInitial AS c3middleInitial, partner.suffix AS c3suffix, 
    partner.accredations AS c3accredations, partner.phone AS c3Phone, 
    partner.faxNumber AS c3FaxNumber, partner.mobilePhone AS c3Mobile, 
    partner.email AS c3Email, partner.titleID AS c3Title 

    FROM officelocations_tbl 

    JOIN city_tbl ON (officelocations_tbl.cityID = city_tbl.cityID) 
    INNER JOIN titles_tbl ON titles_tbl.titleID = staff_tbl.titleID 
    LEFT OUTER JOIN state_tbl ON (officelocations_tbl.stateID = state_tbl.stateID) 
    LEFT OUTER JOIN staff_tbl contact1 ON (contact1.staffID = officelocations_tbl.contact1) 
    LEFT OUTER JOIN staff_tbl contact2 ON (contact2.staffID = officelocations_tbl.contact2) 
    LEFT OUTER JOIN staff_tbl partner ON (partner.staffID = officelocations_tbl.partner) 

그러나이 나에게 오류 [ERR] 1054을 제공 : 여기 내가 사용하려고 시도하고있는 SQL 문의 최신 버전입니다. 두 줄을 모두 제거한 경우 :

INNER JOIN titles_tbl ON titles_tbl.titleID = staff_tbl.titleID 
    titles_tbl.*, 

작동하지만 제목을 가져 오지는 않습니다. 나는이 방법을 시도해 보았지만 그때는 제목을 한 번만 가져 왔고 세 가지 연락처 모두를 가져 오지는 않습니다.

SELECT 
    staff_tbl.staffID, 
    staff_tbl.staffID_C2, 
    staff_tbl.staffID_P, 
    staff_tbl.firstName, 
    staff_tbl.middleInitial, 
    staff_tbl.lastName, 
    staff_tbl.suffix, 
    staff_tbl.accredations, 
    staff_tbl.email, 
    staff_tbl.phone, 
    staff_tbl.mobilePhone, 
    staff_tbl.officePhone, 
    staff_tbl.faxNumber, 
    staff_tbl.address1, 
    staff_tbl.address2, 
    staff_tbl.cityID, 
    staff_tbl.stateID, 
    staff_tbl.zipCode, 
    staff_tbl.titleID, 
    staff_tbl.locationID, 
    staff_tbl.photoURL, 
    staff_tbl.vCardURL, 
    staff_tbl.qRCodeURL, 
    staff_tbl.resumeURL, 
    staff_tbl.biography, 
    staff_tbl.dateCreated, 
    officelocations_tbl.locationID, 
    officelocations_tbl.officeName, 
    officelocations_tbl.address1, 
    officelocations_tbl.address2, 
    officelocations_tbl.cityID, 
    officelocations_tbl.stateID, 
    officelocations_tbl.zipCode, 
    officelocations_tbl.officePhone, 
    officelocations_tbl.contact1, 
    officelocations_tbl.contact2, 
    officelocations_tbl.partner, 
    city_tbl.cityID, 
    city_tbl.cityName, 
    state_tbl.stateID, 
    state_tbl.state_abreviation, 
    state_tbl.state_name, 
    titles_tbl.titleID, 
    titles_tbl.titleName, 

    contact1.firstName AS c1Firstname, contact1.lastName AS c1lastName, 
    contact1.middleInitial AS c1middleInitial, contact1.suffix AS c1suffix, 
    contact1.accredations AS c1accredations, contact1.phone AS c1Phone, 
    contact1.faxNumber AS c1FaxNumber, contact1.mobilePhone AS c1Mobile, 
    contact1.email AS c1Email, contact1.titleID AS c1Title, 

    contact2.firstName AS c2Firstname, contact2.lastName AS c2lastName, 
    contact2.middleInitial AS c2middleInitial, contact2.suffix AS c2suffix, 
    contact2.accredations AS c2accredations, contact2.phone AS c2Phone, 
    contact2.faxNumber AS c2FaxNumber, contact2.mobilePhone AS c2Mobile, 
    contact2.email AS c2Email, contact2.titleID AS c2Title, 

    partner.firstName AS c3Firstname, partner.lastName AS c3lastName, 
    partner.middleInitial AS c3middleInitial, partner.suffix AS c3suffix, 
    partner.accredations AS c3accredations, partner.phone AS c3Phone, 
    partner.faxNumber AS c3FaxNumber, partner.mobilePhone AS c3Mobile, 
    partner.email AS c3Email, partner.titleID AS c3Title 

    FROM officelocations_tbl 
    INNER JOIN staff_tbl ON staff_tbl.staffID = officelocations_tbl.contact1 
    INNER JOIN state_tbl ON state_tbl.stateID = officelocations_tbl.stateID 
    INNER JOIN titles_tbl ON titles_tbl.titleID = staff_tbl.titleID 
    INNER JOIN city_tbl ON city_tbl.cityID = officelocations_tbl.cityID 

    LEFT OUTER JOIN staff_tbl contact1 ON (contact1.staffID = officelocations_tbl.contact1) 
    LEFT OUTER JOIN staff_tbl contact2 ON (contact2.staffID = officelocations_tbl.contact2) 
    LEFT OUTER JOIN staff_tbl partner ON (partner.staffID = officelocations_tbl.partner) 

에만 staff_tbl.staffID = officelocations_tbl.contact1의 제 연관에 대해 끌어. 나는 다음에 무엇을 시도해야하는지에 관해서는 곤란하다. 5 개의 테이블을 모두 가져 오는 방법을 아는 사람이 있습니까?

+0

멍청한 질문 일지 모르지만 staff_tbl에 titleID 열이 포함되어 있습니까? –

+0

예 존재 함 – puddleJumper

답변

0

아래쪽으로 내위를 낮추면됩니다. 파서가 내부 조인에 도달 할 때

LEFT OUTER JOIN state_tbl ON (officelocations_tbl.stateID = state_tbl.stateID) 
INNER JOIN titles_tbl ON titles_tbl.titleID = staff_tbl.titleID 

INNER JOIN titles_tbl ON titles_tbl.titleID = staff_tbl.titleID 
LEFT OUTER JOIN state_tbl ON (officelocations_tbl.stateID = state_tbl.stateID) 

에서 staff_tbl 아직 가입되지 않았으며, 파서는 나중에 합류 것 있는지 확인하기 위해 "예견"하지 않습니다. 그래서 그것은 즉시 "그러한 테이블/필드가 없다"라고 말합니다.

이 순서가 바뀌면 taff_table이 먼저 결합 된 다음 추가 조인에서 사용할 수 있습니다.

+0

이전과 같은 오류 메시지가 여전히 나타납니다. [오류] 1054 - 'on clause'의 'staff_tbl.titleID'열이 알 수 없습니다. 내가 제목 테이블에있는 모든 정보의 선택과 함께 그 내부 조인을 제거하면 그것은 작동하지만 타이틀을 끌어 당기지는 않습니다. – puddleJumper

+0

이 부분에 다른 왼쪽 참여가 있어야합니다. 답변을 편집하는 데 1 초가 걸렸습니다. 그리고 실제로 모든 "staff_tbl"을 남겨 두지 않고 모든 종류의 다른 이름에 staff_tbl 별명을 지정하는 것으로 나타났습니다. * NO * 별명을 사용하여 staff_tbl에 대한 또 다른 조인이 도움이됩니다. –

+0

확실하지 않습니다. 한번 시도했지만 문제는 내가 staff_ID에 대한 직원 테이블에 하나의 지점과 contact_t, contact2 및 파트너에 대한 하나의 locations_tbl에 3 개의 다른 지점 만 있다는 것입니다. 내가 staff_ID를 locations_tbl의 3 개의 다른 지점에 연결하려고하면 오류가 발생합니다. – puddleJumper

관련 문제