现在的需求和情况是有两张表(用户表和用户标签表),单个用户可以有多个标签,也可以没有任何标签。现在需要查询出不包含某个标签的用户的列表。
用户表 user_list ---ul
user_idname
1qq
2weibo
3weixin
4facebook
5twitter
用户标签标签表 user_tag ---ut
user_idtag_id
1100
1101
1102
3101
5102
求sql语句 查询出不包含标签ID为101的用户列表
说明:一个用户可以没有标签也可以有多个标签
#方法1--子查询
SELECT * FROM user_list as ul
WHERE NOT EXISTS(SELECT 1 FROM user_tag as ut WHERE ul.user_id=ut.user_id AND ut.tag_id='101');
#方法2--线拼接标签集合--查找字符串
SELECT ul.user_id, ul.name, GROUP_CONCAT(ut.tag_id) FROM user_list as ul
LEFT JOIN user_tag as ut ON ul.user_id = ut.user_id
GROUP BY ul.user_id, ul.name
HAVING instr(GROUP_CONCAT(ut.tag_id), '101') = 0
OR GROUP_CONCAT(ut.tag_id) IS NULL
//得到的结果为
2
4
5

那么问题来了。要查找包含101,103的标签的语句怎么写呢。可能你会说LEFT JOIN 之后WHERE就可以了,其实不然。且听下回分解。
版权声明:本文为weixin_31147827原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。