MySQL - 仅选择在另一列中具有相同ID和特定值的记录

时间:2017-02-14 23:02:44

标签: mysql wordpress select woocommerce conditional

我正在尝试通过SQL从WooCommerce中删除数百种产品中的特定类别。不幸的是,Wordpress核心仍然无法做到这一点,我还没有找到任何用于批量编辑WooCommerce产品类别的插件或代码。

我是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

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

3 个答案:

答案 0 :(得分:0)

这将选择重复的行:

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

答案 1 :(得分:0)

是的,可以使用exists子查询来检查具有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()子查询,但存在通常更快,因为它不需要第二次获取数据。

答案 2 :(得分:0)

另一种过滤方式是通过join:

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

这样可以避免在Shadow的答案中存在由exists子句引起的多个选择(尽管在语义上完全正确)。