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

Insert into a many-to-many table based on current row information

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

示例表:

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

SQL 脚本:

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

table 会变成:

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

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

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

在 MySQL 中,您可以使用 select 语句将新行插入 table。在您的情况下,您想要插入新行,其中 p_id 行的 m_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 示例。