2017-02-15 48 views
1

在我的Opencart商店中,我有许多产品可以选择颜色和尺寸。 有时由于从excel导入,颜色选项只有一个值,例如白色。当依赖关系的价值基础上移除两个表中的记录

我想远程所有选项,其中optionvalue只有一个选择。

该信息存储在两个表中:oc_product_option_valueoc_product_option

例如在oc_product_option_value这看起来是这样的:

product_id option_id 
-------------------- 
66   18 
66   18 
66   17 
67   18 
67   18 
67   17 

所以我想需要与选项17

除去一次66选17和一次67当我使用:

select * from oc_product_option_value group by product_id, option_id having count(*) = 1 

它给我所有的product_id只有一个optionvalue,我可以删除它。 但我还需要从表oc_product_option删除相同的product_id。 如何选择oc_product_option中只有oc_product_option_value中有一个选项值的所有产品。

我试过,但它不工作:

select * from oc_product_option 
where option_id IN (select product_id from oc_product_option_value group by product_id, option_id having count(*) = 1) 
+0

你能报告错误吗? –

+0

没有错误,只是一个空的结果。 –

回答

0

试试这个在option_id

select oc.* from oc_product_option oc 
INNER JOIN (
select option_id,product_id from oc_product_option_value group by product_id, option_id having count(*)=1 
) t on t.option_id=oc.option_id AND t.product_id =oc.product_id 
+0

没有。得到了一个错误: SELECT * FROM oc_product_option 其中option_id IN(由PRODUCT_ID从oc_product_option_value组中选择option_id,option_id有COUNT(*)ORDER BY'product_id' ASC LIMIT 0,25 –

+0

编辑我的回答,我错过了一个最后')' –

+0

它让我获得了很多结果。随着 '选择oc_product_option *其中的product_id中(由PRODUCT_ID选择oc_product_option_value组的product_id,option_id具有计数(option_id)= 1)' 我还可以得到什么结果,但我相信它必须是这样的。 例如,在oc_product_option_value中,我得到614行。在oc_product_option中最后提到的代码中,我得到了970行。还包括不止一次计数的option_id。 –

0

确定这使我有点接近:

select * from oc_product_option where product_id in (select product_id from oc_product_option_value group by product_id, option_id having count(option_id) = 1) 

这给我所有正确的product_id但显示所有option_id的product_id。不只是那些单一的。