2017-02-14 73 views
0

我试图找到一种解决方案,通过SQL从WooCommerce中的数百个产品中删除特定类别。不幸的是WordPress的核心仍然无法做到这一点,我还没有发现任何插件或代码批量编辑类别的WooCommerce产品。MySQL - 在另一列中只选择具有相同ID和特定值的记录

我是新来的SQL,并试图把我在这里找到的一些查询放在一起,但没有一个正常工作。

我相信如果有人知道答案,更多的人会发现这个话题真的很有帮助。

我的产品有多个类别,因此表看起来像这样:

object_id term_taxonomy_id 
1   10 
1   20 
1   30 
2   10 
2   30 
3   20 
3   30 
3   40 
4   10 
4   20 

我要筛选具有两种类别10和20的产品..

object_id term_taxonomy_id 
1   10 
1   20 
4   10 
4   20 

..和那么只有选择用价值20行,所以输出应该是这样的:

object_id term_taxonomy_id 
1   20 
4   20 

我希望我想要实现是可能的。

回答

0

是的,这是可能的使用存在子查询,检查与taxinomy ID对象= 10:

select t1.object_id, t1.term_taxonomy_id 
from yourtable t1 
where t1.term_taxonomy_id=20 
    and exists (select 1 
       from yourtable t2 
       where t2.term_taxonomy_id=10 and t2.object_id=t1.object_id) 

您可以使用自联接或in()子查询,但存在通常更快,因为它不需要第二次获取数据。

+0

完美的作品,非常感谢! –

0

这将选择重复的行:

SELECT 
    object_id, term_taxonomy_id, COUNT(*) 
FROM 
    YOUR_TABLE_NAME 
GROUP BY 
    object_id, term_taxonomy_id 
HAVING 
    COUNT(*) > 1 
0

另一种方式来过滤,这是通过加入:

SELECT t.object_id, t.term_taxonomy_id 
FROM yourtable t 
    INNER JOIN yourtable t1 
     ON t.object_id = t1.object_id 
     AND t1.term_taxonomy_id = 10 
WHERE t.term_taxonomy_id = 20 

,它可以让你避免诱发多种选择存在是暗影的答案条款(这是完全正确的语义,虽然)。

+0

存在的子查询在多种情况下比联接更快,因为存在的子查询不会获取任何数据,而您需要在联接中获取两次数据。 – Shadow

+0

尤里谢谢你的回答,你的解决方案也很好,它只比Shadow的慢一点:) –

+0

对,将两个巨大的数据量进行比较会很有趣 –

相关问题