Mysql 加入4个表格的问题
请看下图 上面说,Mysql 加入4个表格的问题,mysql,sql,database,join,Mysql,Sql,Database,Join,请看下图 上面说, 投资组合有一个提供商 投资组合具有投资类型 Client\u Profile拥有Client和Portfolio 现在,我需要获得分配给每个客户的客户列表,投资组合,最后是每个投资组合拥有的提供商名称和投资类型 下面是我获取数据的查询 SELECT Client_Portfolio.*, Client.Name as "Client Name", Provider.Name as "Provider Name", Portfolio.* FROM Client_Portfo
投资组合
有一个提供商
投资组合
具有投资类型
Client\u Profile
拥有Client
和Portfolio
客户列表
,投资组合
,最后是每个投资组合拥有的提供商
名称和投资类型
下面是我获取数据的查询
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
但它不起作用,它给了我不正确的结果,它只显示了属于一个客户端的两个结果,仅此而已
那么,如何实现这项任务呢?内部联接
s将只显示所有表都提供非空值的行。由于您的架构包含可选的提供程序,您将需要使用某种外部联接(例如,左联接
):
@GordonLinoff:等等,等等,我会检查输入错误。。但是告诉我我的查询是否正确。@GordonLinoff:不,我的查询是错误的。Profile
或Portfolio
(只是一个小的输入错误)?如果你不想错过没有提供者的投资组合(你的模式说提供者是可选的)@狙击手样本数据集和期望的数据会有帮助,也可以考虑添加你的例子。schema@knittl:对不起,打错了。它是Portfolio
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