【问题标题】:How to efficiently join these 3 tables?如何有效地加入这 3 个表?
【发布时间】:2021-01-18 15:40:05
【问题描述】:

我正在开发一个在数据库中有 4 个表的个人议程。如何获取用户对应的联系人以及该用户联系人对应的地址和电话?

关注 diagram ER.

我还不是很有经验,我从来没有开发过真正的系统,我不知道这种关系结构是否正确。如果您有帮助改进或纠正此结构的内容,我将不胜感激。

注意:我正在使用 PostgreSql

【问题讨论】:

    标签: database postgresql inner-join relationship


    【解决方案1】:

    这样的?

    SELECT  *
    
    FROM    contacts
        JOIN user ON contacts.id_user = user.id
        JOIN addres ON contacts.id_addres = addres.id
        JOIN phones ON contacts.id_phone = phone.id
    

    也许您想要 LEFT JOIN,但这取决于您的数据和要求。当然,您可以将 * 替换为您需要的列名。

    【讨论】:

      【解决方案2】:

      基于我根据@SQLpro 解释所做的diagram,这是我的问题的解决方案:

      SELECT * FROM contacts 
               INNER JOIN user ON contacts.id_user = user.id
               INNER JOIN addres ON adresses.id_contact = contacts.id
               INNER JOIN phones ON phones.id_contact = contacts.id
      

      此 sql 返回与最终与用户关联的联系人关联的地址和电话。

      【讨论】:

        【解决方案3】:

        由于 PG SQL 引擎没有聚集索引,也没有索引组织表,因此添加“超级键”而不是使用三个 FK 列创建 PRIMARY KEY 并没有更高的效率。所以放弃你的额外 PK 并将三个 FK 列作为 PK。

        【讨论】:

        猜你喜欢
        • 2014-02-27
        • 2015-04-06
        • 1970-01-01
        • 2017-10-27
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 2016-03-19
        • 2023-03-19
        相关资源
        最近更新 更多