只插入不存在的行

Only insert not existing rows

我有一个 table priceid,item_name,date,priceitem_name 可以有多个价格,例如:

ID          item_name          date          price
320           item1         01-04-2022       1.40
321           item1         02-04-2022       1.3
322           item1         03-04-2022       1.42
323           item2         03-04-2022       2.54
324           item2         04-04-2022       2.6

此数据来自 API 而我的 ID 是自动递增的。 我现在有一个脚本 运行s 多次并且总是获取这个 API。问题是,API returns 每次都是相同的数据,所以如果我每次执行脚本时 运行 正常插入,我就会有这样的重复条目(注意 ID):

ID          item_name          date          price
325           item1         01-04-2022       1.40
326           item1         02-04-2022       1.3
327           item1         03-04-2022       1.42
328           item2         03-04-2022       2.54
329           item2         04-04-2022       2.6

什么是正确的 SQL- 仅插入没有 dateitem_name 的行的方法?

一种选择是使用现有逻辑来阻止重复插入的发生:

INSERT INTO price (item_name, date, price)
SELECT  -- your data here
WHERE NOT EXISTS (
    SELECT 1
    FROM price
    WHERE date = <date to be inserted> AND
          item_name = <item to be inserted>
);

另一种选择可能是在 (date, price) 上放置一个唯一索引。这将在插入重复项时导致异常。当您不希望经常发生此类重复时,此选项可能最有意义。