从多个结果中删除一些数据

时间:2017-02-17 09:45:39

标签: mysql many-to-many

我的多对多数据库存在问题。

我有简单的博客系统

发布| 类别| post_has_category

当我使用join选择帖子时没有在类别“3”中,它已经提交(3是示例条目)

因为在我的数据库商店中这样的帖子类别

柱(ID):1

类别(ID):3

post_has_category:

post_id category_id

1 3

1 4

在我选择猫3中的帖子后,选择了帖子1,但我不想要它,因为它属于另一行中的猫3 ..

1 个答案:

答案 0 :(得分:1)

我们可以使用子查询来标识出现post_id 3的所有category_id。然后,我们可以将原始表连接到此子查询,并仅保留那些与子查询中的任何违规项不匹配的post_id

SELECT p1.*
FROM posts p1
LEFT JOIN
(
    SELECT DISTINCT post_id
    FROM posts
    WHERE category_id = 3
) p2
    ON p1.post_id = p2.post_id
WHERE p2.post_id IS NULL

请注意,如果给定的DISTINCT只能与给定的post_id关联一次,则子查询中的category_id应该是不必要的。