【发布时间】:2020-03-23 22:02:35
【问题描述】:
我有两个表 Document 和 Label(不是我的真实情况,我是在使用类比)。一个文档可以有 N 个标签。当我需要选择已列出标签的文档时,我可以轻松做到这一点
select D.id from document D
join label L on D.id = L.document_id
where L.value in('label1','label2',...)
如果我需要没有列出标签的文档,如何编写查询? 当我这样做时
select D.id from document D
join label L on D.id = L.document_id
where L.value not in('label1','label2',...)
然后它不起作用。无论如何,将返回具有多个标签且其中一个标签在列表中的所有文档。因为带有 Document 和那些剩余标签(未列出的标签)组合的 raw 将简单地匹配 where 条件,因此查询将返回我不想返回的 Documents。
我实际上正在处理类似 Java Spring JPA 类型查询中的查询。我需要为我的过滤框架解决这个问题。但我认为最好先在 SQL 层面解决这个问题。
顺便说一下,为了简单起见,我们可以用“!=”替换“不在”。问题还是一样。
有什么简单的解决方案吗?提前谢谢你
【问题讨论】: