从表

时间:2016-01-21 03:29:27

标签: mysql join

我试图弄清楚如何使用另一个表中的组引用来扩展company_ids表。对于给定的company_name,我想获取其company_ids,将它们与company_groups表连接,并获取它们的group_ids。从那里,我想让每个company_id与group_id相关联,并将它们插入到带有正确company_name的公司表中。

结构有点不典型。单个公司名称可以包含许多ID,因为该ID不能用作单个公司的唯一标识符。我试图确保所有这些都被复制到公司表中。我确定这是一个相当简单的加入命令,但我从来都不擅长自己加入表格。有人可以帮忙吗?谢谢!

+---------------+
|   companies   |
+---------------+
| company_id PK |
| company_name  |
+---------------+

+----------------+
| company_groups |
+----------------+
| company_id PK  |
| group_id       |
+----------------+

这是一个例子。在公司表中,我有公司"特斯拉",有三个不同的ID。

+--------------+------------+
| company_name | company_id |
+--------------+------------+
| Tesla        |     647552 |
| Tesla        |     927572 |
| Tesla        |     748563 |
+--------------+------------+

在company_groups表中,每个group_id都有一个或多个company_ids。

+----------+------------+
| group_id | company_id |
+----------+------------+
| 227      |     647552 |
| 227      |     111743 |
| 227      |     111842 |
+----------+------------+

我想将company_name与多个group_ids匹配,然后查找与该组关联的所有company_ids。然后将新的company_ids插入到公司表中,如下所示:

+--------------+------------+
| company_name | company_id |
+--------------+------------+
| Tesla        |     647552 |
| Tesla        |     927572 |
| Tesla        |     748563 |
| Tesla        |     111743 |
| Tesla        |     111842 |
+--------------+------------+

2 个答案:

答案 0 :(得分:0)

当where子句中出现相同的表名时,无法插入表中。

您可以使用临时第三个表来完成此项工作

第二个想法,你的问题要么有趣还是不够清楚,请提供你的样本数据,以便我可以更新我的答案

答案 1 :(得分:0)

我明白了。嵌套查询效果很好:

REPLACE INTO companies (company_name, company_id)
SELECT a.company_name, company_groups.company_id
FROM
(
SELECT group_id, company_groups.company_id, companies.company_name
FROM companies
JOIN company_groups
ON companies.company_id=company_groups.company_id
GROUP BY group_id
) a
JOIN company_groups
ON company_groups.group_id=a.group_id
GROUP BY company_id;