添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

依旧是上面的公共信息表info。有一个公共信息的操作页面,用户往这个表新增记录的时候,需要判断,已添加过的产品不能再次添加。

  • 注意:用户新增信息的时候,产品是多选的,产品id以逗号分隔的形式提交字符串,如下:
  • 提交参数:“11,13,20”,20在第二条记录中已经出现了,所以就不能添加

问题:两个以逗号分隔字符串(pro_ids字段 和 提交的字符串)如何匹配

思路:把提交的字符串参数,转换成表的形式,就和场景1一样了

select 
    t1.COLUMN_VALUE as id 
from info t,TABLE(fn_split(#{ids},',')) t1
where instr(','|| t.pro_ids || ',',','|| t1.COLUMN_VALUE || ',')>0

创建 记录表 数据结构:

CREATE OR REPLACE TYPE "TY_STR_SPLIT" IS TABLE OF VARCHAR2 (8000)

自定义 分隔字符串 函数:

CREATE OR REPLACE FUNCTION fn_split
  p_str       IN VARCHAR2,
  p_delimiter IN VARCHAR2 DEFAULT ','
) RETURN ty_str_split IS
  j         INT := 0;
  i         INT := 1;
  len       INT := 0;
  len1      INT := 0;
  str       VARCHAR2(32767);
  str_split ty_str_split := ty_str_split();
BEGIN
  len  := length(p_str);
  len1 := length(p_delimiter);
  WHILE j < len LOOP
    j := instr(p_str, p_delimiter, i);
    IF j = 0 THEN
      j   := len;
      str := substr(p_str, i);
      str_split.extend;
      str_split(str_split.count) := str;
      IF i >= len THEN
        EXIT;
      END IF;
      str := substr(p_str, i, j - i);
      i   := j + len1;
      str_split.extend;
      str_split(str_split.count) := str;
    END IF;
  END LOOP;
  RETURN str_split;
END fn_split;
  • 之所以使用前后加上逗号的方式匹配判断,是因为怕出现如下情况:
  • pro_ids = ”12,14“,COLUMN_VALUE=”1“,这样COLUMN_VALU就出现在pro_ids中了,但我们的期望是,只有12和14才能匹配上,改成如下:
  • pro_ids = “,12,14,”,COLUMN_VALUE=“,1,”,这样COLUMN_VALU就不存在pro_ids中了
FIND_IN_SET(str,strlist),该函数用于判断 str 是否在 strlist 中,如果是,作为条件,返回对应数据,如果str不在strlist 或strlist 为空字符串,则返回值为 0 。 group_concat(),官方:该函数返回带有来自一个组的连接的非... 今天在写一个业务的时候, 遇到了一个慢查询。 我习惯写业务之前先将sql写好, 这样可以确保写业务之前数据源是对的,并且可以先看到自己写的sql慢不慢,有没有可以优化的地方。 今天在写sql时就遇到了一条很慢的sql. 我最开始写的sql是这样的: -- 总共1517条结果 SELECT count(*) FROM DZShare.T_C_HISDATA_1H H , DZShare.T_C_AI_D A , DZShare.T_Y_SBBHDEVICE_SI 一个的外键是有多个值组成,并由逗号分隔,如何与其他关联查询?问题的场景尝试办法一:简单查询尝试办法二:动态传值 问题的场景 在开发的过程中,博主遇到了一个问题。由于其他人建的时候没有严格的遵守第一范式的设计模式,导致一个字段里含有多个值,并以逗号分隔,但是这个字段又作为外键要与其他的主键进行关联。如下图。 这个里的tenant_id就是外键,可以存在多个以逗号分隔。 tenant_id... 该文章是转载,用于记录一下。原文章出处在:https://blog.csdn.net/Knight_quan/article/details/51767827 有时为了数据库简洁,存放数据的时候,某一字段采用逗号隔开的形式进行存储。 一般情况这个字段都应该具有如下几个共性。 被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的与这个... FIND_IN_SET 的作用是:判断某一个数值是否在 这个字段里面,假如字符串str 在由N 子链组成的字符串strlist 中,则返回值的范围在 1 到 N 之间。一个字符串就是一个由一些被‘,'符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlis... 书籍和作者之间是一对多的关系,那么在建的时候,可以通过建立书籍、作者、书籍作者关联中每个字段里只填充一个值,如果是一本书,多个作者,则新增多行数据】来实现业务逻辑,而不是把这种一对多的关系建立成一对一。: str 要查询字符串,strlist 需查询字段,参数以”,”分隔,形式如t_book中的author_uuid;存在的问题:不同于普通的多关联查询,author_uuid字段中存放的是作者uuid的集合,各个作者uuid之间以逗号隔开,无法直接进行数据关联。 在Python中,字典是一系列键-值对。每一个键都与一个值相关联,键可以用来访问与之相关联的值。与键相关联的可以是数字、字符串、列乃至字典。 键-值对是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,而键-值对之间用逗号分隔。 字典是一个动态结构,可随时在其中添加键-值对。Pyhton不关心键-值对的添加顺序,而只关心键和值之间的关联关系。 要修改字典中的值,可依次指定字典名、用方括号括起来的键以及与该键相关联的新值。 alien_0 = {‘color’: ‘gr mysql以逗号分隔数据去另一张关联查询: SELECT t.tname, b.* FROM w_topic t ,w_dwxxb b WHERE CONCAT(',',t.orgcode,',') LIKE CONCAT('%,',b.orgcode,',%') t中的 t.name数据是以逗号分隔,以concat 分隔t.name 去b关联查询对应的数据;如果分隔符是“、”,则只需要改成以下: SELECT t.tname, b.* FROM w_topic t ,w_dwxxb b