Sql 如何在两个不同的表中插入一个select?
我有三张桌子。一个是我的球员表,一个历史表和一个项目表 我需要检查玩家表中的每个玩家是否已经在历史记录表中,如果没有,我需要插入到历史记录表中,然后在项目表中给出一个项目(另一个插入) 我已经得到了这段代码,但我不知道如何为一个选择运行两个不同的插入,我一直在搜索,但也许我应该使用IF和THEN 我的问题是:Sql 如何在两个不同的表中插入一个select?,sql,postgresql,Sql,Postgresql,我有三张桌子。一个是我的球员表,一个历史表和一个项目表 我需要检查玩家表中的每个玩家是否已经在历史记录表中,如果没有,我需要插入到历史记录表中,然后在项目表中给出一个项目(另一个插入) 我已经得到了这段代码,但我不知道如何为一个选择运行两个不同的插入,我一直在搜索,但也许我应该使用IF和THEN 我的问题是: INSERT INTO tb_item (player_id, friend_id, item_id) SELECT 1, id, 101 FROM tb_player WHERE vi
INSERT INTO tb_item (player_id, friend_id, item_id)
SELECT 1, id, 101 FROM tb_player
WHERE vip = 1
AND creation_date BETWEEN now() - INTERVAL '2 year' AND now() - INTERVAL '1 years'
AND id NOT IN ( SELECT ig.player_id FROM tb_history ig WHERE ig.item_id = 101
您不能这样做,您必须使用两个insert语句,另一种方法是,当第一个表中的insert将自动插入到第二个表时,使用表的触发器(还有另一个insert语句)您可以这样插入
WITH inserted_item AS (
INSERT INTO tb_item (player_id, friend_id, item_id)
SELECT 1, id, 101 FROM tb_player
WHERE vip = 1
AND creation_date BETWEEN now() - INTERVAL '2 year'
AND now() - INTERVAL '1 years'
AND id NOT IN (
SELECT ig.player_id FROM tb_history ig WHERE ig.item_id = 101
)
RETURNING *
)
INSERT INTO tb_history (some_col1, some_col2, some_col3)
SELECT player_id, friend_id, item_id
FROM inserted_item
我从未使用过Postgress,但这听起来像是存储过程的工作。我很难理解您想要什么。请回答您的问题,并添加一些示例数据和基于该数据的预期输出。请格式化文本,听起来好像您正在寻找一个可写的CTE:我想使用2 insert语句是可以的,但我不想为同一件事选择两次tb_播放器,我只想检查是否应该插入它,然后插入到这两个表中,有没有办法?您可以使用temp table来删除temp table上的结果,然后对2个目标表进行两次插入,这是在SQL速度较慢或SQL在第二次调用时可以返回不同的结果时建议的,在这种情况下是3 insert语句。