我有以下表格
product
product_id
parent_product_id
product_details
product_id
percent
和父表:
parent_product
parent_product_id
description_1
parent_product_details
parent_product_id
percent
我需要的是从不存在的product_detail中删除的逻辑(..来自parent_product_detail的数据)
然后
插入不存在的product_detail(来自parent_product_details的数据)
当我执行此
时delete from product_details pd
where not exists
(select ppd.*
from parent_product pp,
parent_product pd,
product p,
parent_product_details ppd,
,product_details pd
where pp.parent_product_id = '172'
and pd.parent_product_id = ppd.parent_product_id
and ppd.parent_product_id = pp.parent_product_id
and pd.product_id = p.product_id -- this filter
)
/
rollback
/
1040 rows deleted
Roll Back Completed
我遇到的问题是产品没有任何产品细节。因此,当选择/执行子查询时,它只显示一个结果
select ppd.*
from parent_product pp,
parent_product pd,
product p,
parent_product_details ppd,
--,product_details pd
where pp.parent_product_id = '172'
and pd.parent_product_id = ppd.parent_product_id
and ppd.parent_product_id = pp.parent_product_id
--and pd.product_id = p.product_id -- this filter
如何从product_details中删除parent_product_details中不再存在的记录,然后添加带有insert的新记录到不存在的逻辑?
答案 0 :(得分:2)
我认为你想要一个相关的子查询。您还需要修复语法以使用正确的JOIN
语法,而不是古老的commas-in-from-clause事物:
delete from product_details pd
where not exists (select 1
from parent_product pp join
parent_product_details ppd
on ppd.parent_product_id = pp.parent_product_id join
parent_product mc
on mc.parent_product_id = ppd.component_parent_product_id
product p
on p.parent_product_id = pp.parent_product_id
where pp.parent_product_id = '172' and
pd.product_id = p.product_id -- this filter
);