MySQL-mysql 以字段为in的查询条件进行联表查询

意见反馈 意见反馈 主题:991 回复:2082

MySQL-mysql 以字段为in的查询条件进行联表查询

瑾兮 发布于 2017-07-27 字数 327 浏览 1070 回复 3
CREATE TABLE `user_use_index` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
`exceptions` varchar(100) NOT NULL COMMENT '异常的指标id',
`time` int(10) unsigned NOT NULL COMMENT '添加时间',
PRIMARY KEY (`id`),
)
INSERT INTO `user_use_index` VALUES (1,'1,2,3', 1342773543);

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

偏爱自由 2017-10-21 3 楼
SELECT i.* FROM index_data as i left join `user_use_index` as u on i.id in(u.`exceptions`)

应该这是这样吧。

修改后的答案:(你该不会是要这种结果吧?)

SELECT * FROM  `user_use_index` as u right join index_data as i on u.`exceptions` like concat('%',i.id,'%')
浮生未歇 2017-09-30 2 楼

你使用left join,left join是以左表(user user index)的记录为基础的。换句话说,左表的记录将会全部表示出来,而右表(index data)只会显示符合搜索条件的记录(index_data on index_data.id in(user_use_index.exceptions))。

所以只会显示左表中插入的一条记录。

你这条语句执行的意思是查询出user_use_index中异常指标ID在index_data范围内的所有记录,我感觉这个逻辑是正确的。

为什么应该有3条数据呢?

浮生未歇 2017-08-04 1 楼

晓渊歌说的很对,是不是想到的那三条记录?select 第二张表里的字段就可以了

SELECT index_data.id,index_data.name,index_data.time FROM user_use_index left join index_data on index_data.id in(user_use_index.exceptions)