假设我有一个如下表结构:
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列"。
答案 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
仅获取特定行。