加入4个表时出现问题

时间:2014-09-14 16:29:18

标签: mysql sql database join

请看下面的图表。

enter image description here

它说,

  1. Portfolio有一个Provider
  2. Portfolio有一个Investment_Type
  3. Client_Profile有一个ClientPortfolio
  4. 现在,我需要获取分配给每个人的ClientsPortfolios列表,最后是每个投资组合所拥有的Provider名称和Investment_Type

    以下是我获取数据的查询

    SELECT Client_Portfolio.*,
    Client.Name as "Client Name",
    Provider.Name as "Provider Name",
    Portfolio.*
    FROM Client_Portfolio
    INNER JOIN Client ON Client_Portfolio.idClient = Client.idClient
    INNER JOIN Portfolio ON Client_Portfolio.idPortfolio = Portfolio.idPortfolio
    INNER JOIN Provider ON Portfolio.idProvider = Provider.idProvider
    

    但它没有用,它给了我不正确的结果,它只显示了2个属于一个Client的结果,而这就是全部。

    那么,我怎样才能完成这项任务呢?

1 个答案:

答案 0 :(得分:1)

INNER JOIN只会显示所有表都提供非空值的行。由于您的架构包含可选的提供程序,因此您需要使用某种外部联接(例如LEFT JOIN):

SELECT Client_Portfolio.*,
Client.Name as "Client Name",
Provider.Name as "Provider Name",
Portfolio.*
FROM Client_Portfolio
INNER JOIN Client ON Client_Portfolio.idClient = Client.idClient
INNER JOIN Portfolio ON Client_Portfolio.idPortfolio = Portfolio.idPortfolio
-- show row even if it does not have a provider:
LEFT JOIN Provider ON Portfolio.idProvider = Provider.idProvider