请看下面的图表。
它说,
Portfolio
有一个Provider
Portfolio
有一个Investment_Type
Client_Profile
有一个Client
和Portfolio
现在,我需要获取分配给每个人的Clients
,Portfolios
列表,最后是每个投资组合所拥有的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
的结果,而这就是全部。
那么,我怎样才能完成这项任务呢?
答案 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