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

标签 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

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

所以考虑第一个表。如果 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

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

我怎样才能得到我需要的结果?也许使用子查询?

最佳答案

SELECT CASE dc.contact
         WHEN 1 THEN c.name1
         WHEN 2 THEN c.name2
         WHEN 3 THEN c.name3
       END name  
     , CASE dc.contact
         WHEN 1 THEN c.email1
         WHEN 2 THEN c.email2
         WHEN 3 THEN c.email3
       END email
  FROM companies c
    INNER JOIN doc_company dc
      ON c.id = dc.idCompany
  WHERE dc.idDoc = 1

关于mysql - 过滤 2 个表之间的连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45110885/

相关文章:

Mysql 使用 Perl DBI 跨两个表删除重复行

SQL - 插入一行并返回主键

php - SQL 从表中获取不同的日期值

mysql - 全外连接SQL错误jj

sql - 在 T-SQL 中输出逗号分隔的列表

mysql - 从 mySQL 数据库有条件删除

sql - 为什么在没有连接的情况下从多个表中选择

mysql - 连接两个表而不计算错误的输出或缺少表中的 NULL 输出

C# Mysql 出现 fatal error

mysql - 经典的asp参数查询到MYSQL