基于多个id将多行插入到sql中

时间:2018-04-23 12:45:14

标签: mysql sql insert

我想为每个用户插入三个值或三行。我知道我可以使用以下查询

INSERT INTO subscriptions(id_account, subscription) 
SELECT id_account, 'subscriptionVAlue' FROM   unnest ('{123,456,789}'::int[]) id;

为列表中的每个id插入一行。 但我想要的是这样的

INSERT INTO subscriptions (account_id, subscription, i18nkey) 
VALUES (id, 'subscription1', 'translation1')
VALUES (id, 'subscription2', 'translation2')
VALUES (id, 'subscription3', 'translation3')
where id in (123,1234,410,4512);

我知道这是一个糟糕的查询,但我想要类似的行为。这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用cross join

INSERT INTO subscriptions (account_id, subscription, i18nkey) 
    SELECT a.account_id, subscription, i18nkey
    FROM (SELECT 'subscription1' as subscription, 'translation1' as i18nkey UNION ALL
          SELECT 'subscription2', 'translation2' UNION ALL
          SELECT 'subscription3', 'translation3'
         ) x CROSS JOIN
         (SELECT 123 as account_id UNION ALL SELECT 1234 UNION ALL
          SELECT 410 UNION ALL SELECT 4512
         ) a;

unnest()不是MySQL语法。您也可以使用unnest()执行类似操作。上述内容几乎可以在任何数据库中使用,但子查询可能需要FROM子句(例如FROM dual)。