mysql内部从多个表多次连接同一个表和同一列

时间:2013-08-08 02:31:45

标签: mysql inner-join

我在工作时遇到搜索屏幕的mysql查询问题。我已经使用我将在下面发布的代码进行查询,但我怀疑有更好的方法来实现它。 Mysql真的很新手,我只是想着它,或者尝试着。

以下是数据库的概念: 我的查询中涉及实体,地址,联系人,客户,组和工厂表。

每个客户,集团和工厂都是“实体”,因为缺乏更好的词汇。每个实体在实体表中都有自己的实体ID。

实体表包含地址记录ID和联系人记录ID。

在设施搜索屏幕上,如果用户搜索电话号码,我想搜索客户端和组记录以及设施记录。然后像往常一样返回任何匹配的设施信息。

这就是我到目前为止所做的事情(我还没有为设施记录之外的地址做任何事情,我为了解释自己而硬编码了一些东西):

SELECT facility.FacilityID, facility.Name, contact.PhoneNumber, addy.State addy.ZipCode, facility.ProductionFacilityID,
                              facility.ProductionEntityID
                              FROM Facility facility
                              INNER JOIN ClientGroup cg ON facility.GroupID = cg.GroupID
                              INNER JOIN Client c ON cg.ClientID = c.ClientID
                              INNER JOIN Entity e ON facility.FacilityID = e.EntityID
                              INNER JOIN Entity eg ON cg.GroupID = eg.EntityID
                              INNER JOIN Entity ec ON c.ClientID = ec.EntityID
                              INNER JOIN Contact contact ON e.BillingContactID = contact.ContactID
                              INNER JOIN Contact contactg ON eg.BillingContactID = contactg.ContactID
                              INNER JOIN Contact cc ON ec.BillingContactID = cc.ContactID
                              INNER JOIN Address addy ON addy.AddressID = e.PhysicalAddressID
                              WHERE (facility.FacilityID like '%$searchfor%'
                              OR contactg.PhoneNumber like '%$searchfor%'
                              OR cc.PhoneNumber like '%$searchfor%')
                              AND facility.IsRowActive=1
                              ORDER BY $searchtype";

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

是的,为维护起见,更好的方法是创建仅内部联接的视图并查询视图。请记住,在性能方面,几乎没有改进,但代码的维护将变得更加容易。

鉴于您的目的,除非您决定更改表格的结构,否则内部联接并非完全可以避免