mysql 逗号 join_mysql – sql join表,其中1列有逗号

您应该真正查看Database normalization并首先通过添加联结表来规范化您的结构,并保存表格中的关系,存储在tablec中的每个关系都将存储在新的联结表中,但不能作为逗号分隔列表,每行将包含c和一个用户的id每行id,如果无法更改架构,可以使用find_in_set查找set中的值

select *

from tblC c

JOIN tblB b

ON (find_in_set(b.userid,c.userids) > 0)

where c.nname="new1"

编辑规范化架构

我已从tblC中删除了userids列,而是创建了一个新的联结表,因为tblC_user有2列c_id这将与tblC的id列相关,第二个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 c

join tblC_user cu on(c.id = cu.c_id)

join tblB b on (b.userid = cu.userid)

where c.nname="new1"

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值