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

标签 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";

在此先感谢您的帮助!

最佳答案

是的,出于维护目的执行此操作的更好方法是创建仅包含内部联接的 View 并查询该 View 。请记住,在性能方面几乎没有改进,但代码的维护会变得更加容易。

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

关于mysql内部从多个表多次连接同一个表和同一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18116992/

相关文章:

mysql - 两组序列。删除记录后如何重置

mysql - sql子查询如何获取想要的值

mysql - SQL查询在内部连接到右表后从左表中选择不同的行

mysql - WHERE 子句中使用多个 OR 运算符的 INNER JOIN 会增加执行时间

sql - 错误: 'duplicate key value violates unique constraint' even when checking with 'where not in'

php - Codeigniter:MySQL Where 子句和引号

php - 从表中插入一些列值,有些是手动插入的

MySQL 全内连接

mysql - 添加第二个 INNER JOIN MySQL

php - 从 Angular 2 Web 应用程序在 MySQL 中插入数据