首页 新闻 搜索 专区 学院

大神帮忙写个SQL根据符号分割字符串

0
悬赏园豆:5 [已解决问题] 解决于 2018-01-30 15:26

下面是表sql

复制代码
/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50718
Source Host           : localhost:3306
Source Database       : testd

Target Server Type    : MYSQL
Target Server Version : 50718
File Encoding         : 65001

Date: 2018-01-30 08:55:56
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `deptname` varchar(50) DEFAULT NULL,
  `tid` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('1', '营销部', '1,2');
INSERT INTO `dept` VALUES ('2', '市场', '2');

-- ----------------------------
-- Table structure for type
-- ----------------------------
DROP TABLE IF EXISTS `type`;
CREATE TABLE `type` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `tname` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of type
-- ----------------------------
INSERT INTO `type` VALUES ('1', 'admin');
INSERT INTO `type` VALUES ('2', 'user');
复制代码

dept 表

id     deptname  tid

1       营销部       1,2

2       市场          1

type表

id     tname

1       admin

2       user

 

想要查询到的效果是

1 营销部 admin

1 营销部 user

2 市场   user

这个sql怎么写  tid 那块是 1,2,想把那分割开;

DanBrown的主页 DanBrown | 小虾三级 | 园豆:1496
提问于:2018-01-30 09:11
< >
分享
最佳答案
0

select id,deptname,tname from dept d join type t on substring(d.tid,1,1) = CONVERT(VARCHAR, t.tId) or substring(d.tid,3,1) = CONVERT(VARCHAR, t.tId)  这样就可以得出你想要的结果了

收获园豆:5
William_June | 菜鸟二级 |园豆:216 | 2018-01-30 14:32

这个不对啊,执行不了,还有CONVERT我查了一下是SQL Server的CONVERT() 函数是把日期转换为新数据类型的通用函数。我现在用的是mysql

DanBrown | 园豆:1496 (小虾三级) | 2018-01-30 14:43

@DanBrown: 我写的这个是SQL server的 我先看看mysql怎么改

William_June | 园豆:216 (菜鸟二级) | 2018-01-30 14:46

@William_June: 谢谢终于解决了没用过find_in_set  我在好看看

DanBrown | 园豆:1496 (小虾三级) | 2018-01-30 15:19

@DanBrown: 市场的tid不是1吗 他要user吗

William_June | 园豆:216 (菜鸟二级) | 2018-01-30 15:19

@DanBrown: 

select id,deptname,tname from dept d INNER join type t on
find_in_set('1',d.tid)= t.tId or find_in_set('2',d.tid) = t.tid

你看看是这样吗 我看了一眼题目吓得秒删。。

William_June | 园豆:216 (菜鸟二级) | 2018-01-30 15:20

@William_June: 那个是我打错了1 对应的是admin,正确的.

DanBrown | 园豆:1496 (小虾三级) | 2018-01-30 15:24

@DanBrown: 嗯 

William_June | 园豆:216 (菜鸟二级) | 2018-01-30 15:26

@DanBrown: 不对 我刚刚那个有问题 题目没有错   市场根据你上面创建数据库的语句     的确应该是user  所以应当是这样的 

select id,deptname,tname from dept d INNER join type t on 
 find_in_set('1',d.tid) = find_in_set('1',t.tid)  or   substring_index(d.tid,',',1) = find_in_set('2',t.tid)  
William_June | 园豆:216 (菜鸟二级) | 2018-01-30 16:17
其他回答(1)
0

CHARINDEX(',',VALUE) 

ll...ll | 园豆:364 (菜鸟二级) | 2018-01-30 09:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册