小编典典

选择没有特定标签的帖子

sql

我有一个post / tag数据库,其中包含通常的post,tag和tag_post表。tag_post表包含tagid和postid字段。

我需要查询帖子。当我想获取具有特定标签的帖子时,必须使用联接:

... INNER JOIN tag_post ON post.id = tag_post.postid 
WHERE tag_post.tagid = {required_tagid}`

当我想获取包含tagIdA和tagIdB的帖子时,我必须使用两个联接(最终我觉得很满意)。

现在,我需要查询没有特定标签的帖子。如果没有想那么多,我只是改变了=!=

... INNER JOIN tag_post ON post.id = tag_post.postid 
WHERE tag_post.tagid != {certain_tagid}`

繁荣!逻辑错误!

我确实提出了这个建议-只是在这里写逻辑:

... INNER JOIN tag_post ON post.id = tag_post.postid 
WHERE tag_post.postid NOT IN 
(SELECT postid from tag_post where tagid = {certain_tagid})

我知道这可以解决问题,但是由于我的成长方式,每当我使用子查询编写查询时,我都会感到内((无论是否合理)。

提出一个更好的方法来做到这一点?


阅读 175

收藏
2021-05-16

共1个答案

小编典典

您可以将其视为“在帖子中查找所有与标签不匹配的行(针对特定标签)”

这是左联接的教科书用例。

LEFT JOIN tag_post ON post.id = tag_post.postid AND tag_post.tagid = {required_tagid}
WHERE tag_post.tag_id IS NULL

请注意,必须在联接的ON子句中具有标签ID。

2021-05-16