2个excel查找相同数据并标记,如何查询包含有两个标签的同一条记录
2个excel查找相同数据并标记,如何查询包含有两个标签的同一条记录所以查询我们需要用groupBy进行分组过滤。得到唯一的md5值 url,title的关系最重要的是符合条件:count(*) = 2 【匹配到两个标签】满足条件的记录会被找出来
需求:我们有很多数据,每一条数据,可能有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 【匹配到两个标签】
满足条件的记录会被找出来





