0

好的,我的数据库中有 5 个表,它们如下所示 officelocations_tbl state_tbl city_tbl staff_tbltitles_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 - Unknown column 'staff_tbl.titleID' in 'on Clause'。如果我删除这两行:

    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 张桌子?

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 回答