MySQL - 一个字段存储多个ID时的查询
2014-04-23 00:12
525 查看
一、说明
当在一张表的某个字段中存储了另外一张表的多个ID时常用查询
二、准备
假设有一博客,每一个主题允许有多个类别。数据库设计时建了类别和主题两张表,主题对类别的关联设置在主题表中。
三、查询
1、查询多ID的字段中包含某个ID的记录
SQL:
2、查询多ID字段中这些ID所代表的记录
SQL:
3、查询时将多ID的字段的ID转换为对应的标识
SQL:
4、补充
FIND_IN_SET函数默认是以符号 , 作为分割符的,如果多ID字段使用的不是这个默认的分隔符,而是以如 | 的符号作为分隔符,那么:
当在一张表的某个字段中存储了另外一张表的多个ID时常用查询
二、准备
假设有一博客,每一个主题允许有多个类别。数据库设计时建了类别和主题两张表,主题对类别的关联设置在主题表中。
-- 类别表DDL CREATE TABLE `T_CATEGORYS` ( `C_ID` int(11) NOT NULL, `C_NAME` varchar(255) NOT NULL, PRIMARY KEY (`C_ID`) )
-- 主题表DDL CREATE TABLE `T_TOPIC` ( `T_ID` int(11) NOT NULL, `T_NAME` varchar(255) NOT NULL, `T_CATEGORYS` varchar(128) NOT NULL, PRIMARY KEY (`T_ID`) )
-- 准备类别数据 INSERT INTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('1', 'Struts'); INSERT INTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('2', 'Spring'); INSERT INTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('3', 'iBatis'); INSERT INTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('4', 'Hibernate');
-- 准备主题数据 INSERT INTO `xilen_dev`.`T_TOPIC` (`T_ID`, `T_NAME`, `T_CATEGORYS`) VALUES ('1', 'SSI整合示例', '1,2,3'); INSERT INTO `xilen_dev`.`T_TOPIC` (`T_ID`, `T_NAME`, `T_CATEGORYS`) VALUES ('2', 'SSH整合示例', '1,2,4');
三、查询
1、查询多ID的字段中包含某个ID的记录
SQL:
-- 查询类别包含了iBatis(id=3)的主题记录 SELECT * FROM T_TOPIC WHERE FIND_IN_SET(3, T_CATEGORYS)结果:
2、查询多ID字段中这些ID所代表的记录
SQL:
-- 查询主题 SSH整合示例(id=2) 包含的类别记录 SELECT * FROM T_CATEGORY c WHERE (SELECT FIND_IN_SET(c.C_ID,t.T_CATEGORYS) from T_TOPIC t where t.T_ID=2)结果:
3、查询时将多ID的字段的ID转换为对应的标识
SQL:
-- 查询主题表时将类别的ID转换为类别的NAME SELECT t.T_ID AS topicId, (SELECT GROUP_CONCAT(c.C_NAME) FROM T_CATEGORY c WHERE FIND_IN_SET(c.C_ID,t.T_CATEGORYS)) AS categoryName FROM T_TOPIC t结果:
4、补充
FIND_IN_SET函数默认是以符号 , 作为分割符的,如果多ID字段使用的不是这个默认的分隔符,而是以如 | 的符号作为分隔符,那么:
-- 非 , 作为分隔符时,先REPLACE函数替换它 SELECT * FROM T_TOPIC WHERE FIND_IN_SET(3, REPLACE(T_CATEGORYS,'|',','))
相关文章推荐
- MySQL - 一个字段存储多个ID时的查询
- MySQL - 一个字段存储多个ID时的查询
- 一个字段存储多个ID时的查询
- mysql查询同一个字段必须满足多个值
- 对于有Id,ParentId,Name这样类型字段的表的一个sql查询
- mysql根据一个字段查询重复数据
- mysql查询某一个表中,某一字段有重复的记录条数
- MySQL使用select查询时,在查询结果中增加一个字段并指定固定值
- MySQL中REGEXP正则查询同一个字段模糊搜索
- mysql 查询一个表部分字段,然后插入另一个表中
- mysql如何查询一个表中所有字段的名字
- mySql 为查询的结果集增加一个序号字段
- mysql查询:同一个字段满足多个条件的对应字段
- mysql查询某一个字段是否包含中文字符
- 数据表中有字段ID,fatherID即可存储一个树,下面说说如何遍历这个树
- MySql存储过程:查询数据库里每个表的最大id值
- mysql如何把查询到的数据加上一个自动编号字段
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- mysql中如何将查询结果的多个记录中的指定字段放到一个二维数组中,以及在in子句中使用数组