select u.* from temp_user_file u where FIND_IN_SET(3,u.file_id_str)
需求二:关联查询用户所有file文件的名称和URL
查询sql:
SELECT t.user_id, f.id AS file_id, f.file_name, f.file_url FROM temp_user_file t
LEFT JOIN temp_file f ON FIND_IN_SET(f.id,t.file_id_str)
本人不建议在正式的大型项目中使用逗号分隔,存储数据,但往往有一些老项目或者遗留的表中存在类似的结构,如果实在不能新增表,只能扩展部分字段用以支持1对多关系,可参考。
被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表,一定是一对多的关系 比如下面这个表结构所代表的content与tag这两个对象 代码如下: mysql> SELECT * FROM content; +—-+——+| id | tags | +—-+——+| 1 | 1,2 | | 2 | 2,3 | +—-+——+ 2 rows in set (0.01 sec) mysql> SELECT * FROM tag; +—-+——-+| id | name | +—-+——-+| 1 | php | | 2 | 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
Mysql语句中,以
逗号分隔的
字符串中是否
包含某个特定
字符串,类似于判断一个数组中是否
包含某一个元素,例如:判断 ’a,b,c,d,e,f,g‘ 中是否
包含 ‘a’,
sql语句如何
实现?
find_in_set(A,B),B是一个以
逗号分隔的
字符串,A是一个特定
字符串,该方法表示判断B中是否
包含A。
select * from sys_user where find_in_set(2,user_group_id)
首先我们建立一张带有逗号分隔的字符串。
CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR(20) NOT NULL,pnum VARCHAR(50) NOT NULL);
然后插入带有逗号分隔的测试数据
INSERT INTO test(pname,pnum) VALUES
想多造一些测试数据,表中字段又多一个个敲很麻烦,导出表中部分字段数据又不想导出ID字段(因为ID字段是自增的,导出后再插入会报唯一性错误),select * 查出来又是所有的字段。
可以通过如下SQL查询表中所有字段通过逗号连接,然后复制出来进行select查询再导出
select group_concat(COLUMN_NAME) '所有字段' from information_schema.COLUMNS where table_name = '表名';
执行效果如下:
下面的语句可以查询某个库中
在MySQL中,将一个字段中以逗号分隔的值取出来形成新的字段可以采用函数SUBSTRING_INDEX()来实现。该函数能够从一个字符串中截取子串。具体实现步骤如下:
1. 创建新的字段并命名。
2. 通过转换函数CONCAT_WS()将原字段中的字符串按照逗号进行分隔。
3. 使用SUBSTRING_INDEX()函数从分隔后的字符串中取出需要的子串。
4. 将子串插入到新字段中。
下面是一个示例代码:
ALTER TABLE table_name ADD COLUMN new_column_name varchar(50);
UPDATE table_name SET new_column_name =
SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT_WS(',',old_column_name), ',', 2), ',', -1);
以上代码实现了将原字段中第二个逗号分隔的值取出来放到新字段中的功能。其中,CONCAT_WS()函数的作用是将原字段中的值按照逗号进行分隔,SUBSTRING_INDEX()函数的第一个参数是需要截取的字符串,第二个参数是分隔符,第三个参数是需要截取的位置。这样,就可以实现将一个字段中以逗号分隔的值取出来形成新的字段了。
haike__: