只插入不存在的行
Only insert not existing rows
我有一个 table price
列 id,item_name,date,price
。
item_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- 仅插入没有 date
和 item_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)
上放置一个唯一索引。这将在插入重复项时导致异常。当您不希望经常发生此类重复时,此选项可能最有意义。
我有一个 table price
列 id,item_name,date,price
。
item_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- 仅插入没有 date
和 item_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)
上放置一个唯一索引。这将在插入重复项时导致异常。当您不希望经常发生此类重复时,此选项可能最有意义。