繁体   English   中英

SQL 将同一表中的每个字段的新行插入表中

[英]SQL Insert into table new rows foreach field in same table

我有一个类别、子类别和产品的数据库。 许多子类别,因此他们的产品没有被父类别采用,所以我试图使用 SQL 来解决这个问题,但我遇到了一些问题。

所述表具有三列; id_category、id_product、position(它们都是整数)在此表中,每次产品属于某个类别时,都会针对给定类别的每个 id_category 重复该 id_product。 无论是父类别还是子类别。

例如,我们可以说子类别是 12 而父类别是 143

到目前为止,我尝试过的是

SELECT id_product FROM category_products WHERE id_category = 12

这确实给了我有兴趣制作新行的产品,但我无法使 INSERT 语句工作。

其次,position 也是一个问题,因为我需要 select 最后一个最高的数字,并为每个字段添加一个 +1,因为它是该类别中产品的 position。

我要找的基本上是:

  1. 取 id_product where category = 12
  2. 为每个 id_product 制作一行,其中 category 等于 143
  3. 在 position 中取最高整数,其中类别 = 143 并对其执行 +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;

SQLize.online的结果:

+============+=============+==========+
| 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       |
+------------+-------------+----------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM