用户表 user
id name
1 张三
2 李四
3 王五
标签表 tags
id uid title
1 1 聪明
2 1 勤奋
3 2 聪明
4 2 勤奋
5 3 聪明
问题是如何查询同时包含某几个标签的人 比如同时包含 聪明,勤奋的人
SELECT `user`.* FROM `user`
JOIN `tags` ON `user`.`id`=`tags`.`uid`
WHERE `tags`.`title` = '聪明'
AND `tags`.`title` = '勤奋'
这个语句查不出来结果,应该怎么写?
-- 表的结构
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
INSERT INTO `user` (`id`, `name`) VALUES
(1, '张三'),
(2, '李四'),
(3, '王五');
CREATE TABLE `tags` (
`id` int(9) NOT NULL,
`uid` int(9) NOT NULL,
`title` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
INSERT INTO `tags` (`id`, `uid`, `title`) VALUES
(1, 1, '勤奋'),
(2, 1, '聪明'),
(3, 2, '肥宅'),
(4, 2, '勤奋'),
(5, 2, '聪明'),
(6, 3, '聪明');
4 回答
![?](http://img1.sycdn.imooc.com/5458471300017f3702200220-100-100.jpg)
慕田峪9158850
TA贡献1794条经验 获得超7个赞
你那个查询的条件明显就不对
// tags表 `tags`.`title` = '聪明' AND `tags`.`title` = '勤奋' 这种数据根本就不存在
SELECT * FROM user
WHERE id IN (
SELECT uid FROM tags WHERE title IN ('聪明', '勤奋') GROUP BY uid HAVING count(uid) = 2
);
![?](http://img1.sycdn.imooc.com/5458502c00012d4a02200220-100-100.jpg)
慕桂英546537
TA贡献1848条经验 获得超10个赞
SELECT u
.* FROM user
u
WHERE ( SELECT count(id
) FROM tags
WHERE uid
= u
.id
AND ( title
= '聪明' OR title
= '勤奋' ) ) > 1
![?](http://img1.sycdn.imooc.com/545863cd0001b72a02200220-100-100.jpg)
狐的传说
TA贡献1804条经验 获得超3个赞
select user.*,count(tags.uid)as num from user left join tags on `user`.id = tags.uid
where (`tags`.`title` = '聪明' OR `tags`.`title` = '勤奋') group by tags.uid
having count(tags.uid) > 1
- 4 回答
- 0 关注
- 552 浏览
添加回答
举报
0/150
提交
取消