Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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
Sql 将关联数据添加到查询结果_Sql_Oracle - Fatal编程技术网

Sql 将关联数据添加到查询结果

Sql 将关联数据添加到查询结果,sql,oracle,Sql,Oracle,这可能已经在这里了,但很难找到,这是可以理解的。基本上,我有一个主表,companys,带有CompanyID。我必须创建连接到it的表-用户和承包商。一家公司可能有多个用户,也可能有多个承包商。但用户和承包商之间没有任何关系 我想要的是一份公司所有用户和所有承包商的列表,如下所示: Company1 User1 Contractor1 Company1 User2 Contractor2 Company2 User3 Contractor1 Company2

这可能已经在这里了,但很难找到,这是可以理解的。基本上,我有一个主表,companys,带有CompanyID。我必须创建连接到it的表-用户和承包商。一家公司可能有多个用户,也可能有多个承包商。但用户和承包商之间没有任何关系

我想要的是一份公司所有用户和所有承包商的列表,如下所示:

Company1    User1    Contractor1
Company1    User2    Contractor2
Company2    User3    Contractor1
Company2    User4    NULL
Company3    User5    Contractor2
Company3    NULL     Contractor3
在上述情况下,公司1有两个用户和两个承包商,公司2有两个用户和一个承包商,公司3有一个用户和两个承包商

我不知道这是否可以在一个纯SQL查询中重新创建。如果我使用的是PHP,那就很容易了——我只需将其全部拉入一个数组并创建子数组。但我正试图在Logi Info中实现这一点,虽然到目前为止我还不知道如何在Logi的对象中实现这一点,但我希望我可以直接在SQL中实现这一点


这可能吗?连接通常包括难以删除的重复项;例如,对于Company1,它将有四行,User1-Contractor1、User1-Contractor2、User2-Contractor1和User2-Contractor2。我想不出一个分组的方法,因为它需要一个唯一的组合(已经存在),或者它会删除错误的东西,比如让两个不同的承包商重复User1,然后完全忽略User2。

你可以,尽管这有点不自然

SELECT usr.name
      ,cont.name
      ,nvl(usr.comp_id,cont.comp_id)
      ,comp.name
FROM (SELECT id, name, comp_id, row_number() over (partition by comp_id order by id) rn from usr) usr 
FULL OUTER JOIN (SELECT id, name, comp_id, row_number() over (partition by comp_id order by id) rn from cont) cont
  ON (cont.comp_id = usr.comp_id
      AND cont.rn = usr.rn)
JOIN comp
  ON (comp.id = nvl(usr.comp_id,cont.comp_id))
ORDER BY nvl(usr.comp_id,cont.comp_id)

|     NAME | USERNAME | CONTRACTORNAME |
|----------|----------|----------------|
| Company1 |    User1 |    Contractor1 |
| Company1 |    User2 |    Contractor2 |
| Company2 |    User3 |    Contractor1 |
| Company2 |    User4 |         (null) |
| Company3 |    User5 |    Contractor2 |
| Company3 |   (null) |    Contractor3 |
|     NAME | USERNAME | CONTRACTORNAME |
|----------|----------|----------------|
| Company1 |    User1 |    Contractor1 |
| Company1 |    User2 |    Contractor2 |
| Company2 |    User3 |    Contractor1 |
| Company2 |    User4 |         (null) |
| Company3 |    User5 |    Contractor2 |
| Company3 |   (null) |    Contractor3 |