栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

sql连接表,其中1列具有逗号

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

sql连接表,其中1列具有逗号

您应该真正看一下 数据库的规范化
,首先通过添加一个联结表并保持来自tablec的关系来规范化您的结构,存储在tablec中的每个关系都将存储在新的联结表中,但不是以逗号分隔的列表,每一行将保存c和一个id每行的用户ID,如果您无法更改架构,则可以使用它

find_in_set
来查找set中的值

select *  from  tblC cJOIN tblB bON (find_in_set(b.userid,c.userids) > 0)where c.nname="new1"

观看演示


编辑以规范化架构

我已经

userids
从您的列中删除了列
tblC
,而是创建了一个新的联结表,
tblC_user
其中包含2列,
c_id
这将与ID列相关
tblC
,第二列
userid
存储用户关系用户以
tblC
查看示例架构
tblC

CREATE TABLE if not exists tblC(id int(11) NOT NULL auto_increment ,nname varchar(255), PRIMARY KEY (id));INSERT INTO tblC (id, nname) VALUES('1', 'new1'),('2', 'new2'),('3', 'new3'),('4', 'new4'),('5', 'new5');

这是你的连接表

tblC_user

CREATE TABLE if not exists tblC_user( c_id int, userid int);INSERT INTO tblC_user (c_id,userid) VALUES('1','1'),('1','2'),('2','1'),('2','3'),('3','1'),('3','4'),('4','3'),('4','2'),('5','5'),('5','2');

在上面,如果您注意到我还没有存储任何逗号分隔的关系,则用户的每个关系

tblC
都存储在新行中,对于您关心的结果集,我在联接中使用了联结表,新查询也将如下所示

select *  from  tblC cjoin tblC_user cu on(c.id = cu.c_id)join tblB b on (b.userid = cu.userid)where c.nname="new1"

演示2

现在可以通过使用索引来优化上面的查询,您可以轻松维护级联关系



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号