gpt4 book ai didi

mysql - 如果连接不匹配或字段为空,则将行插入表中

转载 作者:行者123 更新时间:2023-11-30 22:54:32 27 4
gpt4 key购买 nike

请原谅这个问题的尴尬标题。

我正在尝试跟踪某些产品的价格,理想情况下没有大量具有相同 product_id 和价格(不同日期)的条目。有 160,000 种产品,每天更新。

我有以下表格:

产品

product_id, price, date_added, date_updated
(id Primary Key)

价格指数

product_id, price, date_updated
(product_id, price, date_updated primary unique)

我正在执行以下查询,但是我无法按最近日期对选择/加入进行排序。

INSERT INTO price_index 
(SELECT p.product_id,p.product_price,p.date_updated FROM products p
LEFT JOIN price_index pi ON (p.product_id = pi.product_id)
WHERE (p.product_price <> pi.product_price OR pi.product_price IS NULL))

如果我将 JOIN 替换为

JOIN (SELECT * FROM price_index ORDER BY date_updated DESC) pi

它会首先进行正确的排序,但是这似乎没有使用任何索引并且一直卡住我的 MySQL GUI 工具。

是否有更好的方法来实现我在这里尝试做的事情?

更新:更新脚本首先用当前价格更新产品表。然后我需要对 price_index 表执行检查/更新。

最佳答案

如果我没理解错的话,您只想在最近的价格发生变化时插入一个新行。我对表格有点困惑。您的查询提到了三个,但您的文字只提到了两个。我假设 product_pricesprice_index 是同一件事。

INSERT INTO product_prices(product_id, price, date_updated)
SELECT p.product_id, p.product_price, p.date_updated
FROM products p LEFT JOIN
price_index pi
ON p.product_id = pi.product_id AND
p.product_price = pi.product_price LEFT JOIN
(SELECT product_id, max(date_updated) as maxdu
FROM price_index
GROUP BY product_id
) pimax
ON pi.product_id = pimax.product_id and pi.date_updated = pimax.maxdu
WHERE pimax.product_id IS NULL;

这使用 left join 来查找产品和价格的匹配项更新日期。如果三个条件中的任何一个不匹配,则插入发生。

关于mysql - 如果连接不匹配或字段为空,则将行插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26991963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com