求帮忙 SQL 语句, 具体看下面!

2019-04-07 21:25:32 +08:00
 lzm1005
A 表:会员表, 字段:id、username; username 的值比如是:李四
B 表:会员组表, 字段: id、groupName、nameList ; nameList 的值比如是:张三,李四,王五

现在要查询 A 表中 username 没有出现在 B 表 nameList 中的会员列表, 数据库是 mysql,求大神帮忙写下 sql 语句!
3736 次点击
所在节点    MySQL
12 条回复
fairyto2
2019-04-07 21:31:12 +08:00
你这个表设计都不符合 nf1
18688639114
2019-04-07 21:37:41 +08:00
如果会员只允许出现在一个 组里面,那 A 表去加个 group_id,B 表也不需要 nameList 了
如果会员可以存在多个组内,那就得重新设计一下 。
1:B 表删除 nameList, 保留 id group_name
2: 增加 C 表 组内成员表 , 需要有 group_id user_id 这样你后面的业务处理起来就方便很多!
lzm1005
2019-04-07 21:44:00 +08:00
@18688639114 现有的 数据表就是这样的 如何在不动数据库的情况下 做处理 或者 A 表没有 group_id 的情况下 如何处理?
qiayue
2019-04-07 21:45:32 +08:00
没有什么东西是一成不变的,改表是最经济的做法,一劳永逸
18688639114
2019-04-07 21:49:33 +08:00
@lzm1005 SUBSTRING_INDEX 这个函数可以帮到你,将“张三,李四,王五” 转换的, 不过处理起来忒麻烦, 具体怎么用这个函数得好好查下文档。。。
tomczhen
2019-04-07 21:52:04 +08:00
从描述内容举例看,表 B 字段 nameList 的值可能是 “张三,李四,王五” 整个字符串,也就是这个表设计是反范式的。

估计后端是 PHP 写的吧 :doge:
xiangyuecn
2019-04-07 21:52:57 +08:00
不改数据库,就赶紧跑路吧。或者祈祷第一个同名的人晚点出现,再跑路。
lzm1005
2019-04-07 21:54:03 +08:00
@xiangyuecn 只是举例..
lzm1005
2019-04-07 21:54:25 +08:00
@xiangyuecn 值肯定是唯一的.
xiangyuecn
2019-04-07 21:54:37 +08:00
#7 username ? 唯一? 当我没说
ebony0319
2019-04-07 22:04:31 +08:00
你的数据属于 sql 反模式。但是还是建议有一张表来记录这种关系。
查这种的思路在 mysql 种写一个类似于 filter 的过滤函数,传入两个字符串 A,B,B 切割后判断 A 在不在里面,但是会非常慢。
huangqincan
2019-04-14 21:48:33 +08:00
select * from A
where usernme no in (select namelist from B)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/552762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX