0

データベースに5つのテーブルがあります。officelocations_tblstate_tblcity_tblstaff_tbltitles_tbl

タイトルテーブルはスタッフテーブルにのみ関連付けられていますが、他のテーブルはすべて内部結合されています。私はさまざまなmysqlステートメントを試しましたが、titles_tblを取り込むことを許可しているものはありません。これが私が使おうとしているSQLステートメントの最新バージョンです:

    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-'on句'の不明な列'staff_tbl.titleID'。両方の行を削除した場合:

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

それは機能しますが、タイトルを引き込みません。私もこの方法で試してみましたが、タイトルを取得するのは1回だけで、3つの連絡先すべてに対しては取得しません。

    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つのテーブルすべてをプルする方法を知っている人はいますか?

4

1 に答える 1

0

INNER JOIN を下に移動するだけです。

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 state_tbl ON (officelocations_tbl.stateID = state_tbl.stateID) 
INNER JOIN titles_tbl ON titles_tbl.titleID = staff_tbl.titleID 

パーサーが INNER JOIN に到達した時点では、staff_tbl はまだ結合されておらず、パーサーは後で結合されるかどうかを「先読み」しません。そのため、「そのようなテーブル/フィールドはありません」ですぐに保釈されます。

これが発生する順序を切り替えると、最初に taff_table を結合してから、それをさらに結合することができます。

于 2012-09-24T03:41:48.917 に答える