Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 加入4个表格的问题_Mysql_Sql_Database_Join - Fatal编程技术网

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