根据当前行信息插入多对多表

时间:2015-01-06 16:25:38

标签: sql many-to-many bulkinsert sequelpro

我有一个多对多的产品和模型ID表。如果ids在另一行中匹配,是否可以插入新行?

示例表:

| p_id | m_id |
+------+------+
|  A   |  2   |
|  A   |  3   |
|  B   |  1   |
|  B   |  2   |
|  C   |  1   |

SQL脚本:

如果任何产品与模型2相关,请插入该产品和产品4的新行。

该表将成为:

| p_id | m_id |
+------+------+
|  A   |  2   |
|  A   |  3   |
|  A   |  4   |
|  B   |  1   |
|  B   |  2   |
|  B   |  4   |
|  C   |  1   |

我必须在SQL中执行此操作。更具体地说,Sequel Pro。

1 个答案:

答案 0 :(得分:1)

我没有和Sequel Pro合作,所以我不知道我是否有正确的语法,但也许我可以给你正确的逻辑。

在MySQL中,您可以使用select语句将新行插入表中。在您的情况下,您希望插入p_idm_id为2的新行。我将从编写该查询开始:

SELECT DISTINCT p_id
FROM myTable
WHERE m_id = 2;

然后,您希望每个新行的m_id为4.您可以在select子句中将其设为常量:

SELECT DISTINCT p_id, 4 AS m_id
FROM myTable
WHERE m_id = 2;

这将为您提供要插入的行:

| p_id | m_id |
+------+------+
|  A   |  4   |
|  B   |  4   |

现在,要插入这些行,语法将如下所示:

INSERT INTO myTable (col1, col2) myQuery;

以下是我使用的内容:

INSERT INTO myTable (p_id, m_id) SELECT DISTINCT p_id, 4 FROM myTable WHERE m_id = 2;

这是一个SQL Fiddle示例。