【发布时间】:2010-11-15 05:13:35
【问题描述】:
抱歉,我无法为我的问题提供更好的标题,因为我对 SQL 还很陌生。 我正在寻找解决以下问题的 SQL 查询字符串。
假设如下表:
DOCUMENT_ID |标签 ---------------------------- 1 |标签1 1 |标签2 1 |标签3 2 |标签2 3 |标签1 3 |标签2 4 |标签1 5 |标签3现在我想选择所有包含一个或多个标签的不同文档 ID(但必须提供所有指定的标签)。 例如: 选择所有带有 tag1 和 tag2 的 document_id 将返回 1 和 3(但不是 4,例如因为它没有 tag2)。
最好的方法是什么?
问候, 启
【问题讨论】:
-
H2,但我不想使用任何 db 特定的东西。
-
如果您使用的是 MSSQL 2005/2008,我将建议您使用公用表表达式。使用 CTE,您可以连接标签值并在结果表上使用子字符串标准。有非数据库特定的方法来进行连接,但它们使用起来过于困难。约翰的回答是很好的干净解决方案。
-
您能否告诉我们您是否允许相同的 DocumentID + Tag 组合多次存在?
-
数据库没有在这些列上使用这样的索引(这是一个 ORM 生成的),所以我们假设是的。