【问题标题】:MySQL: Retrieve data from multiple tablesMySQL:从多个表中检索数据
【发布时间】:2014-09-10 10:44:00
【问题描述】:

请看下表结构。

Client 表有foreign key 对应于Provider 表,而不是NULLPortfolio 表有 foreign key 用于 Client 表,它也不是 NULL

我需要从Portfolio 表中检索所有字段、Client 的名称和分配给ClientProvider 名称,该名称由Portfolio 表引用。

如何在 SQL 代码中执行此操作?

【问题讨论】:

    标签: mysql sql join foreign-keys


    【解决方案1】:

    尝试使用 INNER JOIN 进行以下查询。

    SELECT Portfolio.*,Client.name as "Client Name",Provider.name as "Provider Name"
    FROM Portfolio
    INNER JOIN Client ON Portfolio.Client_id=Client.id
    INNER JOIN Provider ON Client.Provider_id = Provider.id
    

    【讨论】:

    • 它有效,但是有没有一种方法可以替换输出中Client 表的“名称”列和Provider 表的“名称”列的标题?因为每个人都有相同的列名 Name ?除此之外,它正在返回所有 3 个表中的所有数据?
    • 是的,你可以。而不是*,你已经写了所有column duplicate namealias name
    • 我的意思是我需要“投资组合”中的所有数据,但不需要其他数据。那么我应该在哪里指定列名呢?
    • 那你必须写Portfolio.*而不是*
    • 不,我要问的是如何提供ClientProvider 表的列名。
    【解决方案2】:

    这应该会给你预期的结果:

    Select * from client 
      join portfolio on client.id=portfolio.clientId
      join provider on client.provider_id=provider.id
    

    【讨论】:

    • 因为除了Provider 之外我不需要表中的所有字段,我如何指定我需要的列并将alias 分配给它们?
    • @Sniper 添加您需要的列的名称而不是客户端。如果您有重复的名称,则必须添加表名作为前缀。
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多