如何在单个选择中插入两个不同的表?

时间:2016-07-26 12:55:43

标签: sql postgresql

我有3张桌子。一个是我的玩家表,一个历史表和一个项目表。

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

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

这是我的问题:

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

2 个答案:

答案 0 :(得分:1)

您可以使用http://woocommerce.github.io/woocommerce-rest-api-docs/#pagination这样插入

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

答案 1 :(得分:0)

你不能这样做,你必须使用两个插入语句,其他方式来实现它,当第一个表中的insert将自动插入第二个表时(或者另一个insert语句),通过使用表的触发器