数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中,实现查询的方法...

问题描述:一个表a中有个字段dept_id存放表b的主键id(多个用逗号隔开的),现在需要查询表a的数据 并且通过 X关联b查询所有信息,一般的关联是不行的因为一个字段里包含多个主键id

查阅资料 可以使用

find_in_set()和 locate(substr,str)

利用mysql 字符串函数 find_in_set();

SELECT * FROM users WHERE find_in_set('aa@email.com', emails);

这样是可以的,怎么理解呢?

mysql有很多字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以","分割开。

注:当str2为NO1:“3,6,13,24,33,36”,NO2:“13,33,36,39”时,判断两个数据中str2字段是否包含‘3’,该函数可完美解决

mysql > SELECT find_in_set()('3','3,6,13,24,33,36') as test;
-> 1

mysql > SELECT find_in_set()('3','13,33,36,39') as test;
-> 0

使用locate(substr,str)函数,如果包含,返回>0的数,否则返回0 

例子:判断site表中的url是否包含'http://'子串,如果不包含则拼接在url字符串开头
update site set url =concat('http://',url) where locate('http://',url)=0 

注意mysql中字符串的拼接不能使用加号+,用concat函数

具体查询方法有如下:

SELECT `a`.`id`,`a`.`submit_time`,`a`.`house_id`,`a`.`status`,`a`.`type`,`a`.`request`,`a`.`response`,`a`.`expense_customer`,`a`.`expense_company`,
CONCAT(b.real_name,'(',(select `name` from es_department where id in (trim(BOTH ',' FROM b.dept_id))),')' ) AS sale_name,
`b`.`phone`,`f`.`node_name` 
FROM `es_bl_ticket_house` `a`
SELECT
	 GROUP_CONCAT(b.name) AS sale_name //函数连接字符串
	LEFT JOIN b  ON  locate(b.id,a.dept_id)	//使用此函数关联b中主键或者此函数也可find_in_set

参考链接:https://blog.csdn.net/weixin_33720452/article/details/93177203

https://www.csdn.net/gather_26/MtTaMgxsNDM1Mi1ibG9n.html

数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中,实现查询的方法...问题描述:一个表a中有个字段dept_id存放表b的主键id(多个用逗号隔开的),现在需要查询表a的数据 并且通过 X关联b查询所有信息,一般的关联是不行的因为一个字段里包含多个主键id查阅资料 可以使用find_in_set()和 locate(substr,str)方法一:利用mysql 字符串函数 find_in_set();SELECT * FROM users WHERE ..
一个简单JAVA 小工程进行两个MYSQL数据库对象的比较,导入eclipse中,修改jdbc.properties文件中的JDBC信息,然后直接运行action包类中的main方法,生成EXCEL,excel中包含表中列,索引,函数过程差异比对结果。 这个主要比对的是表中列的基本信息比较,比较是否存在是否类型一致等,对于函数存储过程则只是简单的比较是否存在,内容没有比对。如果谁感兴趣可以完善该比对功能。 JAVA代码,不复杂,看看就明白,都是采用简单代码。 开发的环境:JDK1.7 eclipse
1,第一种SELECT `a`.`id`,`a`.`submit_time`,`a`.`house_id`,`a`.`status`,`a`.`type`,`a`.`request`,`a`.`response`,`a`.`expense_customer`,`a`.`expense_company`, CONCAT(b.real_name,'(',(select `name` from es_d...
select distinct(substring_index(substring_index(a.col,',',b.help_topic_id+1),',',-1)) (select group_concat( 分析过程: 我新建了一个security_phonebill_callee_num,用以存放导入的被叫号码信息 所有的通话数据保存在t_phonebill_201702中,想要查询必须要实现like,就是以下sql的实现效果 select org_caller_num,org_call
如下所示: update table1 as z left join table2 as zb on z.zcatId = zb.zcatId set z.zcatName = zb.zcatName where z.zcatName is null; 以上这篇mysql更新一个里的字段等于另一个字段的值实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:Sql查询MySql数据库中的名和描述表中字段(列)信息Python中模块pymysql查询结果后如何获取字段MySQL
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
小编今天在写一个一个数据库数据 导入到 另一个数据库的时候 我是这么写的 代码如下:<?php header(“Content-type:text/html;charset=utf-8”); $conn = mysql_connect(“localhost”,”root”,””);mysql_select_db(‘nnd’,$conn);mysql_select_db(‘ahjk’,$conn);mysql_query(“set names utf8”); $sql = mysql_query(“select content,partid from phpcms_c_disease
select account_id, substring_index(substring_index(a.related_shop_ids,',' ,b.help_topic_id+1),',',-1) shopid sales_hang_account a mysql.help_topic b on b.help_topic_id < (length(a.related_shop_ids) - length(replace(a.related_shop_ids,',',''))+1 t.structure_type '设施id(多个)', CONCAT( case when FIND_IN_SET('1',t.structure_type) then '桥梁,' else '' end, case when FIND_IN_SET('2',t.structure_type) then '路面,' else '' end, case when FIND_IN_SET('3',t.structure_type) then '涵洞,' else '' end, case..
今天讲的是MySQL中的一个内置函数,叫FIND_IN_SET(参数1,参数2)它能够帮我们实现一个列中的值是以逗号分隔id集合这个id集合就是对应另外一张id接下来我把我操作的分享给大家,如果觉得我哪里说得不好的,请大神多多指教。
MySQL 中,有时候一个的某个字段需要存储多个值,这时候可以使用一种叫做“多值属性”的方式来进行设计。比如,如果一个用户可以有多个兴趣爱好,那么可以将这些兴趣爱好保存在一个字段中,用逗号隔开。这种方法看似简单实用,但实际上存在一些问题,例如无法保证数据的唯一性,难以进行查询、筛选和排序等操作,还会浪费存储空间。 更好的方式是将多值属性拆分成多个记录,并使用关联的方式进行管理。例如,将用户兴趣爱好的名称保存在一个表中,然后使用用户ID和兴趣爱好ID来进行关联。这样可以保证数据的唯一性,还可以方便地进行查询、筛选和排序等操作,提高数据的效率和可靠性。 总之,将多值属性进行拆分并使用关联的方式进行管理是一种更加合理和高效的设计方法,可以避免一些潜在的问题和隐患。