MySQL插入具有固定值和多个选择结果的数据

时间:2015-01-11 14:11:04

标签: mysql sql select insert

假设我有一个如下表结构:

notification_table

| id | receiver_id | type | content | time |

接收者ID来自用户表:

USER_TABLE

| id | username |

内容和时间来自广播表:

broadcast_table

| id | content | time |

因此,当我需要插入此通知表时,我需要从用户中选择id并从广播中选择内容+时间,并且类型固定为" system_broadcast"。我可以在一个查询中执行此操作吗?

我试过

INSERT INTO notification_table (receiver_id, type, content, time) 
VALUES (
       (SELECT id FROM user_table WHERE username='test' LIMIT 1), 
        'system_broadcast', 
       (SELECT content, time FROM broadcast_table)
)

但它会返回错误,如" mysql操作数应包含1列"。

1 个答案:

答案 0 :(得分:2)

是的,您可以使用insert . . . select执行此操作。这似乎符合您原始查询的意图:

INSERT INTO notification_table (receiver_id, type, content, time) 
    SELECT (SELECT id FROM user_table WHERE username = 'test' LIMIT 1), 
           'system_broadcast',
           content, time
    FROM broadcast_table;

请注意,这将为broadcast_table中的每一行插入一行。您可能希望where子句或limit仅获取特定行。