美文网首页
一张表中某个字段保存多个外键值,逗号分隔,获取其对应的外键表数据

一张表中某个字段保存多个外键值,逗号分隔,获取其对应的外键表数据

作者: 代码届的泥石流sc | 来源:发表于2020-03-11 16:01 被阅读0次

最近在项目中,遇到一个用户有多个角色的问题。数据库中保存的是角色编码是多个外键并用逗号分隔的值。需求需要查询出相应的中文值,并且合成一个字段。说明 若表字段有1,2,3 则需要根据1,2,3找出对应 的值a,b,c 组成一个字段。
下面开始实现记录:
1.创建学生表

--1.创建stu表
create table stu(
       sid varchar(100) primary key not null,
       sname varchar(100),
       bid varchar(100)
)

comment on column stu.sid is 'id值';
comment on column stu.sname is '名称';
comment on column stu.bid is '书籍,外键值';

--2.创建书籍表单
create table book(
       bid varchar(100) primary key not null,
       bname varchar(100),
       bprice varchar(100)
)

comment on column book.bid is 'id值';
comment on column book.bname is '书籍名称';
comment on column book.bprice is '书籍价格';
--插入数据
insert into stu values('1','小明','1,2');
insert into stu values('2','小红','1,3');
insert into stu values('3','小强','1,2,3,304');
insert into stu values('4','小威','2,3_4,3-3');
--插入数据,注意此处id 为304的数据
insert into book values('1','数学','12');
insert into book values('2','语文','16');
insert into book values('3','英文','13');
insert into book values('3_4','高中英语','10');
insert into book values('3-3','大学英语','20');
insert into book values('304','小学英语','25');

两边加逗号 ,防止 atesta  匹配 test
--         例:1.,a,b_c,d  匹配 %,b_c,%
--            2.,a,b,     匹配 %,a,%
--            3.,a-b,     匹配 %,a-b,%
1.首先我们写一条sql语句
select s.sid,s.sname,s.bid,
(select listagg(b.bname,',') within group(Order by b.bid) from book b where ',' || s.bid || ',' like '%,' || b.bid || ',%') as bname
from stu s

j1.png

结果如图:1-1
我们可以看看 3_4的模糊查找结果

select  * from book b where b.bid like '%3_4%';
j3.png

所以,我们应该避免此处有特殊字符的情况
2.用replace替换_,实现的sql语句

select s.sid,s.sname,s.bid,
(select listagg(b.bname,',') within group(Order by b.bid) from book b where ',' || replace(s.bid,'_','') || ',' like '%,' || replace(b.bid,'_','') || ',%') as bname
from stu s

结果如图:1-2

j2.png
总结:模糊查找代表一个字符了。3_4可以找到304 ,314、3_4。。。等记录 ,所以查找时首先把替换为'', 准确查找所有记录。
这就是一张表字段有多个外键值,查找的方法记录。
ly_dv 一个小菜鸟

相关文章

  • 一张表中某个字段保存多个外键值,逗号分隔,获取其对应的外键表数据

    最近在项目中,遇到一个用户有多个角色的问题。数据库中保存的是角色编码是多个外键并用逗号分隔的值。需求需要查询出相应...

  • 2018-09-03:外键

    外键:若一张表中有一个非主键字段指向了别一张表中的主键,则将该字段叫做外键。 一张表中可以有多个外键。...

  • MySQL day6(2019.4.27)

    一、外键 foreign key: 如果说有一张表中的某个字段(非主键),它是另外一张表的主键,我们称这个字段位外...

  • mysql基础(2)

    外键 在students表中,通过class id的字段,可以把数据与另一张表(class)关联起来,这种列称为外...

  • orm查询操作

    单表查询操作 外键的跨表查询 正向查询(在有外键字段的表向没有的表查询) 反向查询(没有外键的字段向有外键字段的表...

  • 外键约束

    外键的定义: 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。 外键的作用 ...

  • 数据库篇-mysql详解( 五 )之外键与子查询

    一 : 外键操作 外键: foreign key, 外面的键(键不在自己表中): 如果一张表中有一个字段(非主键)...

  • [转]【数据库复习】SQL

    数据库复习SQL语句各个部分执行顺序 外键 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表...

  • 联合查询

    一.外键(foreign key) 外键用于记录表之间的联系外面的键(键不在自己表中):如果有一张表中有一个字段(...

  • Navicat sqlite3触发器设置

    问题:A表中某个字段根据B表插入数据而更新 1. 表设置 重建表中的采集ID是外键(采集表.采集ID) 2. 问题...

网友评论

      本文标题:一张表中某个字段保存多个外键值,逗号分隔,获取其对应的外键表数据

      本文链接:https://www.haomeiwen.com/subject/nzxcjhtx.html