› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
lzm1005
V2EX  ›  MySQL

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

  •  
  •   lzm1005 · Apr 7, 2019 · 5072 views
    This topic created in 2729 days ago, the information mentioned may be changed or developed.
    A 表:会员表, 字段:id、username; username 的值比如是:李四
    B 表:会员组表, 字段: id、groupName、nameList ; nameList 的值比如是:张三,李四,王五

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

    估计后端是 PHP 写的吧 :doge:
    xiangyuecn
        7
    xiangyuecn  
       Apr 7, 2019
    不改数据库,就赶紧跑路吧。或者祈祷第一个同名的人晚点出现,再跑路。
    lzm1005
        8
    lzm1005  
    OP
       Apr 7, 2019
    @xiangyuecn 只是举例..
    lzm1005
        9
    lzm1005  
    OP
       Apr 7, 2019
    @xiangyuecn 值肯定是唯一的.
    xiangyuecn
        10
    xiangyuecn  
       Apr 7, 2019
    #7 username ? 唯一? 当我没说
    ebony0319
        11
    ebony0319  
       Apr 7, 2019
    你的数据属于 sql 反模式。但是还是建议有一张表来记录这种关系。
    查这种的思路在 mysql 种写一个类似于 filter 的过滤函数,传入两个字符串 A,B,B 切割后判断 A 在不在里面,但是会非常慢。
    huangqincan
        12
    huangqincan  
       Apr 14, 2019
    select * from A
    where usernme no in (select namelist from B)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2703 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 08:23 · PVG 16:23 · LAX 01:23 · JFK 04:23
    ♥ Do have faith in what you're doing.