繁体   English   中英

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

[英]MySQL - Select only records with same ID and specific value in another column

我正在尝试找到一种通过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

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

这将选择重复的行:

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

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

另一种过滤方法是通过连接:

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的答案中存在的存在子句引起的多重选择(尽管从语义上来说这是完全正确的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM