我有两个表mysql
。第一个持有公司,第二个持有为这些公司工作的联系人。
有些公司没有联系人,有几个联系人可以为一家公司工作,但永远不会有没有公司的联系人。
表格如下所示:
公司表
company_id
company_name
company_telephone
联系人表
contact_id
works_for_company_id
contact_fullname
contact_telephone
我正在尝试将两个表与一个选择语句组合在一起,以便为每个条目创建一个电话号码列表,例如,一个公司有两个联系人,结果是三个条目,每个条目在一行中都有公司名称和电话号码。
我尝试了 JOIN 语句,这些语句都导致显示联系人而不是其背后的公司,我尝试了 UNION(由于列名不同而不起作用(。我还错过了什么?任何帮助将不胜感激。
您将连接和并集组合在一起 - 但您必须重命名不同名称的列(通过AS
(:
SELECT company_id, company_telephone AS phone FROM company
UNION
SELECT company_id, contact_telephone AS phone FROM company JOIN contacts ON ...
您所需要的只是直接直接连接以获取所有详细信息。您可以将 * 替换为相关列名:
SELECT *
FROM CONTACTS_TABLE con
JOIN COMPANY_TABLE cta ON cta.company_id = con.works_for_company_id
正如人们在之前的评论中告诉您的那样,您需要一个连接/内部连接
SELECT comp.company_id, cont.contact_fullname
FROM company comp
INNER JOIN contacts cont ON comp.company_id = cont.works_for_company_id;
有些公司没有联系人,所以你需要使用LEFT JOIN
SELECT com.company_name,com.telephone ,com.company_id, con.contact_fullname
FROM company com
LEFT JOIN contacts con ON com.company_id = con.works_for_company_id;
UNION 运算符用于组合两个或多个 SELECT 语句的结果集。
- UNION 中的每个 SELECT 语句必须具有相同数量的 列
- 列还必须具有相似的数据类型
-
每个 SELECT 语句中的列也必须按相同的顺序排列
选择
company
。company_name
,company
。company_telephone
从company
其中company.company_id
=1 联盟 选择contact
。contact_fullname
,contact
.contact_fullname
从company
加入contact
company
。company_id
=contact
.works_for_company_id
哪里company
.company_id
=1 限制 0,30