mysql不包含怎么写_求MySQL一个SQL语句 不包含某个标签的用户列表

现在的需求和情况是有两张表(用户表和用户标签表),单个用户可以有多个标签,也可以没有任何标签。现在需要查询出不包含某个标签的用户的列表。

用户表 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

ec24bf017c3fc7471354b63759ff390b.png

那么问题来了。要查找包含101,103的标签的语句怎么写呢。可能你会说LEFT JOIN 之后WHERE就可以了,其实不然。且听下回分解。


版权声明:本文为weixin_31147827原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。