从数据库中的所有表中获取数据

时间:2012-09-24 02:19:22

标签: php mysql

好的,我的数据库中有5个表,如下所示 officelocations_tbl state_tbl city_tbl staff_tbl titles_tbl

titles表只与staff表关联,但其他都是内连接的。我尝试了各种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 clause'中的未知列'staff_tbl.titleID'。如果我删除这两行:

    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个表?

1 个答案:

答案 0 :(得分: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,然后您可以在其他连接中使用它。