【问题标题】:MySQL: How to insert multiple rows into one table for each id of another query?MySQL:如何为另一个查询的每个 id 将多行插入到一个表中?
【发布时间】:2014-02-06 10:10:24
【问题描述】:

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

  1. 我得到了用户 ID:

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

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

    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
);

【问题讨论】:

  • 这完全颠倒了。这有帮助吗?
  • 是的,它有助于迁移数据库数据和结构。

标签: mysql


【解决方案1】:
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'

【讨论】:

  • 谢谢,有点帮助,但我需要自定义值,而不是选定的值。所以基本上它是 2 行插入,每个 things.id
  • 所以@Aleksandr,(并忽略设计的弱点)只使用两个插入,沿着维克拉姆的上述线。
  • @Strawberry,是的,这就是我们要走的路。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-02-14
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 2011-01-26
  • 1970-01-01
相关资源
最近更新 更多