我想为每个用户插入三个值或三行。我知道我可以使用以下查询
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);
我知道这是一个糟糕的查询,但我想要类似的行为。这可能吗?
答案 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
)。