sql语句查询十条记录(如何查询包含有两个标签的同一条记录)
需求:我们有很多数据,每一条数据,可能有N个标签。我们需要检索出包含标签A,标签B的记录,把所有符合条件的记录都找出来
先看我们的实例数据建表语句:
CREATE TABLE Links
(`md5` varchar(4), `url` varchar(10), `title` varchar(5), `numberofsaves` int)
;
INSERT INTO Links
(`md5`, `url`, `title`, `numberofsaves`)
VALUES
('a0a0', 'google.com', 'foo', 200),
('b1b1', 'yahoo.com', 'yahoo', 100)
;
CREATE TABLE Tags
(`md5` varchar(4), `tag` varchar(7))
;
INSERT INTO Tags
(`md5`, `tag`)
VALUES
('a0a0', 'awesome'),
('a0a0', 'useful'),
('a0a0', 'cool'),
('b1b1', 'useful'),
('b1b1', 'boring')
;
我们来看具体查询的SQL语句要怎么写:我们要找到标签包含awesome , useful的记录
SELECT a.md5,
a.url,
a.title
FROM Links a
INNER JOIN Tags b
ON a.md5 = b.md5
WHERE b.Tag IN ('awesome', 'useful') -- <<== 查询条件:标签列表
GROUP BY a.md5, a.url, a.title
HAVING COUNT(*) = 2 -- <<== 匹配到的标签数量
解释:通过一个innerJoin,把两个表关联起来,然后就得到一个标签一行记录的虚拟表,这个虚拟表可能会有相同的md5值的记录,因为他们的tag 字段可能是不同的。
所以查询我们需要用groupBy进行分组过滤。得到唯一的md5值,url,title的关系
最重要的是符合条件:count(*) = 2 【匹配到两个标签】
满足条件的记录会被找出来
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com