Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在两个不同的表中插入一个select?_Sql_Postgresql - Fatal编程技术网

Sql 如何在两个不同的表中插入一个select?

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

我有三张桌子。一个是我的球员表,一个历史表和一个项目表

我需要检查玩家表中的每个玩家是否已经在历史记录表中,如果没有,我需要插入到历史记录表中,然后在项目表中给出一个项目(另一个插入)

我已经得到了这段代码,但我不知道如何为一个选择运行两个不同的插入,我一直在搜索,但也许我应该使用IF和THEN

我的问题是:

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语句。