直截了当。我有三张table,贴子,贴子
POSTS { p_id, title }
TAGS { t_id, name }
POST_TAGS { p_id, t_id }
一篇文章可以有多个标签,我想选择所有没有特定标签的文章。以演示数据为例:
TASKS
p_id | title
1 MyPost 1
2 MyPost 2
3 MyPost 3
TAGS
t_id | name
1 red
2 green
POST_TAGS
p_id | t_id
1 1
2 1
2 2
3 2
现在我想看到所有的职位,没有标签'绿色'。我当前的sql查询如下所示:
SELECT DISCTINCT
p.p_id, p.title
FROM
POSTS as p,
POST_TAGS as pt
WHERE
pt.p_id = p.p_id AND pt.t_id != 2
但这会还我这个
RESULT
p_id | title
1 MyPost 1
2 MyPost 2
因为“mypost2”也有红色标签,所以它是listet。
期望的结果是:
RESULT
p_id | title
1 MyPost 1
编辑:感谢你们,我接受了garethd的答案,因为不存在更不言自明。not in正在工作,但不是空保存(即使我没有要求它-也要感谢nico haase)
德国的解决方案也是正确和有效的,但并不像选定的答案那样不言自明。多亏了你。
3条答案
按热度按时间pkwftd7m1#
这将完成这项工作,因为它在内部查询中搜索所有标记为2的帖子,并在外部查询中排除它们
mbyulnm02#
你可以使用
NOT EXISTS
:yuvru6vn3#
您可以明确地加入寻找绿色标记,并显示那些加入不成功的帖子: