Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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:如何为另一个查询的每个id在一个表中插入多行?_Mysql - Fatal编程技术网

MySQL:如何为另一个查询的每个id在一个表中插入多行?

MySQL:如何为另一个查询的每个id在一个表中插入多行?,mysql,Mysql,我有一个键值表,需要从另一个表中为每个选定的id插入多行 我获取用户id: SELECT @id := id FROM user WHERE email = 'my@email.com'; 我通过用户id获取事物的id: SELECT @things := id FROM `things` WHERE `owner_id` = @id; 现在,我需要为每个@things在键值表中插入多个值。这里的问题是我不能使用select子查询,因为我需要插入内联值,如: INSERT INTO ke

我有一个键值表,需要从另一个表中为每个选定的
id
插入多行

  • 我获取用户id:

    SELECT @id := id FROM user WHERE email = 'my@email.com';
    
  • 我通过用户id获取事物的id:

    SELECT @things := id FROM `things` WHERE `owner_id` = @id;
    
  • 现在,我需要为每个
    @things
    在键值表中插入多个值。这里的问题是我不能使用select子查询,因为我需要插入内联值,如:

    INSERT INTO key_value (key, value)
    VALUES (
        @things, 'CUSTOM VALUE 1'
    ),
    VALUES (
        @things, 'CUSTOM VALUE 2'
    );
    
  • 但是,它不起作用。最后一个查询显然是错误的。任何帮助都将不胜感激


    编辑: 看起来我需要多个查询才能做到这一点:

    SELECT @id := id FROM user WHERE email = 'startour@netron.no';
    
    INSERT INTO key_value (`key`, `value`)
    (
        SELECT id, 'CUSTOM_VALUE_1'
        FROM `things`
        WHERE `owner_id` = @id
    );
    
    INSERT INTO key_value (`key`, `value`)
    (
        SELECT id, 'CUSTOM_VALUE_2'
        FROM `things`
        WHERE `owner_id` = @id
    );
    

    这完全是颠倒的。这有帮助吗?是的,它有助于迁移数据库数据和结构。谢谢,有点帮助,但我需要自定义值,而不是选定值。所以基本上它是两行插入,每个
    things.id
    。所以@Aleksandr(忽略设计的弱点)只需使用两行插入,就像Vikram上面描述的那样。@草莓,是的,这就是我们要做的。谢谢
    INSERT INTO key_value (key, value)
    SELECT user.id as key, things.id as value FROM user
    left outer join things on  user.id=things.owner_id
     WHERE user.email = 'my@email.com'