当前位置:  开发笔记 > 编程语言 > 正文

SQL查询:在多行上模拟"AND"而不是子查询

如何解决《SQL查询:在多行上模拟"AND"而不是子查询》经验,为你挑选了1个好方法。

假设我有一个带有两列的"tags"表:tagidcontentid.每行代表分配给一段内容的标签.我想要一个查询,它将为我提供标记有标记334,338和342的每个内容的争用.

执行此操作的"简单"方法是(伪代码):

select contentid from tags where tagid = 334 and contentid in (
    select contentid from tags where tagid = 338 and contentid in (
        select contentid from tags where tagid = 342
    )
)

然而,我的直觉告诉我,有一种更好,更快,更可扩展的方法来做到这一点.例如,如果我需要找到12个标签的交集怎么办?这很快就会变得可怕.有任何想法吗?

编辑:事实证明这也包含在这篇优秀的博客文章中.



1> Amy B..:
SELECT contentID
FROM tags
WHERE tagID in (334, 338, 342)
GROUP BY contentID
HAVING COUNT(DISTINCT tagID) = 3


--In general
SELECT contentID
FROM tags
WHERE tagID in (...) --taglist
GROUP BY contentID
HAVING COUNT(DISTINCT tagID) = ... --tagcount

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有