简体   繁体   中英

Get data from all tables in database

Ok I have 5 tables in my database they are as follows officelocations_tbl state_tbl city_tbl staff_tbl titles_tbl

The titles table is only associated with the staff table but the others are all inner joined. I have tried various mysql statements but none are allowing me to bring in the titles_tbl. here is the latest version of the sql statement I am attempting to use:

    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)

However this gives me an error [Err] 1054 - Unknown column 'staff_tbl.titleID' in 'on clause'. If I remove both the lines:

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

it works but doesn't pull in the title. I have tried doing it this way as well but then it only pulls in the title once and not for all three contacts.

    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)

This will only pull for the first association of staff_tbl.staffID = officelocations_tbl.contact1. I am stumped as to what to try next. Is there anyone who would know how to get it to pull all 5 tables?

You just need to move your INNER JOIN down lower, eg from

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

to

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

At the time the parser reaches the INNER JOIN, staff_tbl has not yet been joined, and the parser will not "look ahead" to see if it's joined later. So it immediately bails with a "no such table/field".

Switching the order in which this occurs allows taff_table to be joined in first, and then you can use it in further joins.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM