过滤2个表之间的连接结果

时间:2017-07-14 20:09:19

标签: mysql sql

我甚至不确定如何标题这个问题,或者如何为我想要达到的目标寻找类似的问题。

我正在使用两张桌子。第一个包含2个其他表之间的关系。

表doc_companies

idDoc   idCompany   contact
  1         2          1
  1         5          1
  1         6          1
  1         6          3

idDoc是将发送给位于不同公司的不同联系人的文档的ID。令我困惑的是,字段idCompany和contact位于同一个表中。

这是表公司

id      name1       email1          name2       email2          name3       email3
2       John        john@mail.com   Jack        jack@mail.com   Jane        jane@mail.com
5       Susan       susan@mail.com  Pete        pete@mail.com   Mary        mary@mail.com
6       Lily        lily@mail.com   Bob         bob@mail.com    Tom         tom@mail.com

所以我需要从contacts列中获取数字,然后从中获取数据 表公司使用“名称”+联系

之类的东西

所以考虑第一张桌子。如果idDoc = 1

,这是我想要查询的结果
name        email
John        john@mail.com
Susan       susan@mail.com
Lily        lily@mail.com
Tom         tom@mail.com

我不知道如何从这样的查询开始。我的第一个想法是表格之间的内在联系,我想出了这个:

SELECT companies.name1, companies.email1, companies.name2, companies.email2, companies.name3, companies.email.3
FROM companies
INNER JOIN doc_company
ON companies.id = doc_companies.idCompany
WHERE doc_companies.idDoc = 1

但这会返回所有联系人和六列。

如何获得我需要的结果?也许使用子查询?

2 个答案:

答案 0 :(得分:2)

[Illuminate\Database\QueryException]                                         
  SQLSTATE[42S01]: Base table or view already exists:

答案 1 :(得分:1)

在带有外部UNION过滤器的派生表中考虑WHERE查询:

SELECT t.*
FROM
   (SELECT d.idDoc, c.name1 as `name`, c.email1 as `email`
    FROM companies c
    INNER JOIN doc_company d
           ON c.id = d.idCompany
    UNION 
    SELECT d.idDoc, c.name2, c.email2 
    FROM companies c
    INNER JOIN doc_company d
           ON c.id = d.idCompany
    UNION
    SELECT d.idDoc, c.name3, c.email3
    FROM companies c
    INNER JOIN doc_company d
           ON c.id = d.idCompany
    ) t
WHERE t.idDoc = 1

是的,请与主管讨论数据库设计,因为您可以看到查询和存储更复杂,效率更低,可扩展性更低。