我想为每个用户插入三个值或三行。我知道我可以使用以下查询
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);
我知道这是一个糟糕的查询,但我想要类似的行为。这可能吗?
最佳答案
您可以使用交叉连接
:
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
)。
关于mysql - 多行根据多个id插入到sql中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49981429/