Mysql SQL在表中插入同一表中每个字段的新行
我有一个分类、子分类和产品的数据库。许多子类别,因此它们的产品没有被父类别采用,所以我尝试使用SQL来解决这个问题,但我遇到了一些问题 该表有三列;id\u类别、id\u产品、职位(它们都是INT) 在该表中,每当一个产品在一个类别中时,它都会针对给定类别的每个id_类别重复该id_产品。无论是父类别还是子类别 例如,我们可以说子类别是12,而父类别是143 到目前为止,我所尝试的是Mysql SQL在表中插入同一表中每个字段的新行,mysql,sql,insert-select,select-insert,Mysql,Sql,Insert Select,Select Insert,我有一个分类、子分类和产品的数据库。许多子类别,因此它们的产品没有被父类别采用,所以我尝试使用SQL来解决这个问题,但我遇到了一些问题 该表有三列;id\u类别、id\u产品、职位(它们都是INT) 在该表中,每当一个产品在一个类别中时,它都会针对给定类别的每个id_类别重复该id_产品。无论是父类别还是子类别 例如,我们可以说子类别是12,而父类别是143 到目前为止,我所尝试的是 SELECT id_product FROM category_products WHERE id_catego
SELECT id_product FROM category_products WHERE id_category = 12
这确实为我提供了我想创建新行的产品,但我无法使INSERT语句正常工作
其次,位置也是一个问题,因为我需要选择最后一个最高的数字,并为每个字段添加一个+1,因为这是产品在类别中的位置
我想要的基本上是:
+============+=============+==========+
| id_product | id_category | position |
+============+=============+==========+
| 190 | 12 | 10 |
+------------+-------------+----------+
| 191 | 12 | 11 |
+------------+-------------+----------+
| 230 | 12 | 12 |
+------------+-------------+----------+
| 15 | 143 | 12 |
+------------+-------------+----------+
| 150 | 143 | 50 |
+------------+-------------+----------+
在SQL之后,它会像
+============+=============+==========+
| id_product | id_category | position |
+============+=============+==========+
| 190 | 12 | 10 |
+------------+-------------+----------+
| 191 | 12 | 11 |
+------------+-------------+----------+
| 230 | 12 | 12 |
+------------+-------------+----------+
| 15 | 143 | 12 |
+------------+-------------+----------+
| 150 | 143 | 50 |
+------------+-------------+----------+
| 190 | 143 | 51 |
+------------+-------------+----------+
| 191 | 143 | 52 |
+------------+-------------+----------+
| 230 | 143 | 53 |
+------------+-------------+----------+
我尝试了几种不同的语法和一切,但它只是返回错误给我所有的时间。(顺便说一下,这是在PHPMyAdmin中完成的)。如果是MySQL 8.0或更高版本,您可以使用下一个查询:
INSERT IGNORE INTO products
SELECT
id_product,
143 as id_category,
(
SELECT MAX(position)
FROM products
WHERE id_category = 143
) +
(row_number() over (order by id_product)) as position
FROM products
WHERE id_category = 12;
结果来自:
请添加示例输入和输出数据,这将对您的问题大有帮助。@TimBiegeleisen我添加了示例数据,谢谢您的建议。我们需要输入和输出。您只向我们显示了输入。@TimBiegeleisen这是怎么回事?“主键16-143上的重复值”;由于id\u category和id\u product都是主键,SQL是如何变化的?其中一个选项是使用
将忽略插入到产品中
。我刚刚更新了我的答案
+============+=============+==========+
| id_product | id_category | position |
+============+=============+==========+
| 190 | 12 | 10 |
+------------+-------------+----------+
| 191 | 12 | 11 |
+------------+-------------+----------+
| 230 | 12 | 12 |
+------------+-------------+----------+
| 15 | 143 | 12 |
+------------+-------------+----------+
| 150 | 143 | 50 |
+------------+-------------+----------+
| 190 | 143 | 51 |
+------------+-------------+----------+
| 191 | 143 | 52 |
+------------+-------------+----------+
| 230 | 143 | 53 |
+------------+-------------+----------+