下面是表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,想把那分割开;
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) 这样就可以得出你想要的结果了
这个不对啊,执行不了,还有CONVERT我查了一下是SQL Server的CONVERT() 函数是把日期转换为新数据类型的通用函数。我现在用的是mysql
@DanBrown: 我写的这个是SQL server的 我先看看mysql怎么改
@William_June: 谢谢终于解决了没用过find_in_set 我在好看看
@DanBrown: 市场的tid不是1吗 他要user吗
@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: 那个是我打错了1 对应的是admin,正确的.
@DanBrown: 嗯
@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)
CHARINDEX(','
,VALUE)