首页 > 解决方案 > 何时使用不存在的插入选择?

问题描述

目前我正在使用 Where 插入新数据,如下面的代码所示。显而易见的问题是需要每天更改日期以插入新数据。以下是当前正在使用的代码:

INSERT INTO decisions (stock_id, date_price, last_updated_date, p_LT_d50, p_GT_d50)
SELECT stock_id, date_price, now(), adj_close_price < ub1_50_d, adj_close_price > ub1_50_d
FROM bollinger_bands
WHERE date_price = '8/04/2020';

我可以使用 Where Not Exist 代替每天手动更改日期吗?我应该使用 Where Not Exist 来解决我遇到的问题吗?如果是这样,我应该为 Select 的 Where Not Exist 部分填写什么?

这是我到目前为止所拥有的:

INSERT INTO decisions (stock_id, date_price, last_updated_date, p_LT_d50, p_GT_d50)
SELECT stock_id, date_price, now(), adj_close_price < ub1_50_d, adj_close_price > ub1_50_d
FROM bollinger_bands
WHERE NOT EXISTS (SELECT 

任何帮助表示赞赏。

标签: sqlpostgresql

解决方案


插入当天的数据:

INSERT INTO decisions (stock_id, date_price, last_updated_date, p_LT_d50, p_GT_d50)
SELECT stock_id, date_price, now(), adj_close_price < ub1_50_d, adj_close_price > ub1_50_d
FROM bollinger_bands
WHERE date_price = CURRENT_DATE;

插入表格中仍然缺失的所有日期:

INSERT INTO decisions (stock_id, date_price, last_updated_date, p_LT_d50, p_GT_d50)
SELECT stock_id, date_price, now(), adj_close_price < ub1_50_d, adj_close_price > ub1_50_d
FROM bollinger_bands
WHERE date_price NOT IN (SELECT date_price FROM decisions);

与以下相同NOT EXISTS

INSERT INTO decisions (stock_id, date_price, last_updated_date, p_LT_d50, p_GT_d50)
SELECT stock_id, date_price, now(), adj_close_price < ub1_50_d, adj_close_price > ub1_50_d
FROM bollinger_bands bb
WHERE NOT EXISTS (SELECT * FROM decisions d WHERE d.date_price = bb.date_price);

推荐阅读