Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL在表中插入同一表中每个字段的新行_Mysql_Sql_Insert Select_Select Insert - Fatal编程技术网

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

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

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

该表有三列;id\u类别、id\u产品、职位(它们都是INT) 在该表中,每当一个产品在一个类别中时,它都会针对给定类别的每个id_类别重复该id_产品。无论是父类别还是子类别

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

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

SELECT id_product FROM category_products WHERE id_category = 12
这确实为我提供了我想创建新行的产品,但我无法使INSERT语句正常工作

其次,位置也是一个问题,因为我需要选择最后一个最高的数字,并为每个字段添加一个+1,因为这是产品在类别中的位置

我想要的基本上是:

  • 以类别=12的id_产品为例
  • 对于所取的每个id_产品,在类别等于143的地方排一行
  • 在类别=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;
    
    结果来自:


    请添加示例输入和输出数据,这将对您的问题大有帮助。@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       |
    +------------+-------------+----------+