您应该真正看一下 数据库的规范化
,首先通过添加一个联结表并保持来自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
现在可以通过使用索引来优化上面的查询,您可以轻松维护级联关系



