我想弄清楚如何实现以下目标。 (这是一个忽略/从非相关列中删除的简化版本。)
我有一个表项目,其中包含
列item_id product
我有另一张订单表
order_id product item_id
对于项表中的给定 item_id ,在订单>中查找只有一个与产品相关联的订单 table。
请注意,一个不同的产品可能意味着一行或多行用于产品和 item_id 的独特组合。在这种情况下,我需要从订单表中获取产品,并使用该值更新商品表。
因此,如果订单表具有值
情景I
订单表
order_id product item_id
1 apple 12
2 apple 12
然后我需要使用“apple”更新项目表中的产品
情景II
但是,如果订单表具有值
order_id product item_id
1 apple 12
2 orange 12
没有什么需要做的。 商品表中的产品不需要更新。 (默认情况下为null
。)。这是一次性数据修复。展望未来,Order和Item表之间的关系将由应用程序处理。在任何情况下,Order表中的产品都会在条件更新到Item表后保留。
这个问题的解决方案是什么?
答案 0 :(得分:1)
这似乎符合要求:
UPDATE item_table i
SET i.product =
(SELECT
MIN(o.product)
FROM order_table o
WHERE i.item_id = o.item_id
GROUP BY o.item_id
HAVING COUNT(DISTINCT o.product) = 1
)
WHERE i.product IS NULL
;
查看实际操作:SQL Fiddle 如果需要调整/进一步详细说明,请发表评论。
答案 1 :(得分:0)
update Items i
set i.product = (select max(o.product) from Orders o where o.item_id = i.item_id)
where 1 = (
select count(distinct o.product)
from Orders o
where o.item_id = i.item_id
)
注意:我认为您对帖子的一些混淆与您使用unique
这个词有关。我认为您的意思是使用distinct
这个词。
所以当你说:
对于Item表格中的给定item_id,在订单表格中查找只有一个与唯一产品相关联的订单。
我想你想说:
对于Item表格中的给定item_id,在订单表中查找只有一个与不同产品相关联的订单。