Mysql 筛选两个表之间联接的结果
我甚至不知道如何命名这个问题,或者如何寻找类似的问题来实现我的目标 我正在处理两张桌子。第一个表包含其他两个表之间的关系 表doc_公司Mysql 筛选两个表之间联接的结果,mysql,sql,Mysql,Sql,我甚至不知道如何命名这个问题,或者如何寻找类似的问题来实现我的目标 我正在处理两张桌子。第一个表包含其他两个表之间的关系 表doc_公司 idDoc idCompany contact 1 2 1 1 5 1 1 6 1 1 6 3 id name1 email1 name2 emai
idDoc idCompany contact
1 2 1
1 5 1
1 6 1
1 6 3
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是一个文档的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列中获取数字,然后从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
但这将返回所有联系人和六列
我怎样才能得到我需要的结果?是否可以使用子查询?考虑使用外部
过滤器的派生表中的联合查询:
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
是的,与主管就数据库设计进行讨论,因为您可以看到查询和存储更复杂,效率更低,可扩展性也更低。考虑使用外部过滤器的派生表中的联合查询:
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
是的,就数据库设计与主管进行讨论,因为您可以看到查询和存储更复杂、效率更低、可扩展性更低。看起来您的公司的表需要进行原子化/标准化。@Terry我是这么想的,但我需要知道是否有办法使其正常工作。如果不可能的话,我会通知我的主管数据库需要更改。看起来您的公司表需要原子化/标准化。@Terry我是这么想的,但我需要知道是否有办法让它正常工作。如果不可能,我会通知我的主管数据库需要更改。出于某种原因,它会在结果表中添加一个空行。我决定用另一个答案,因为它比较短,但我真的很感谢你的帮助。出于某种原因,它在结果表中添加了一个空行。我决定用另一个答案,因为它比较短,但我真的很感谢你的帮助。