8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

一列中有多个值的查询

M.M. CAN 2月前

34 0

我有一张这样的表格:id name children1 Roberto Michael,Dia2 Maria John,Alex3 Mary Alexandre,Diana 我的问题是;我想找出谁......

我有一张如下的表格:

id     name            children
1      Roberto         Michael,Dia
2      Maria           John,Alex
3      Mary            Alexandre,Diana

我的问题是;我想找出谁有一个名叫亚历克斯的孩子。

我无法 "where children = 'Alex'" 在 SQL 中使用,因为我在同一个单元格中有多个名称。

所以我使用 "where children LIKE '%Alex%'" - 看起来很聪明,但同时我得到了像 Alex 一样的开始 :( Alexandre 或者我想得到 dia 但结果是 dia 和 diana :(

我怎样才能获得该数据类型的单个 Alex?

我希望我能用我糟糕的英语解释我的问题:D

帖子版权声明 1、本帖标题:一列中有多个值的查询
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由M.M. CAN在本站《mysql》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我宁愿为孩子和父母制作类似这样的不同桌子。

    家长桌

    parent_id     name            
    1             Roberto         
    2             Maria           
    3             Mary     
    

    儿童桌

    children_id  parent_id  name
    1            1          Michael     
    2            1          Dia 
    3            2          John
    

    .... 等等

  • ssp 2月前 0 只看Ta
    引用 3

    这就是为什么你想在这里有两张桌子。

    parents:
    id  name
    1   Roberto  
    2   Maria
    3   Mary
    
    children:
    id  parentid name
    1   1        Michael
    2   1        Dia
    3   2        John
    4   2        Alex
    5   3        Alexandre
    6   3        Diana
    

    现在你可以用连接或存在更有效地查询:

    SELECT *
    FROM Parents
    WHERE EXISTS(
        SELECT * 
        FROM Children 
        WHERE parentid=Parents.id 
          AND Children.name='Alex'
     )
    
  • 您应该将数据分成两个表。

    第一个看起来像这样

    ID    Name
    1     Roberto
    2     Maria
    3     Mary
    

    第二个是这样的

    ParentId     child
    1            Michael
    1            Dia
    2            John
    2            Alex
    

    等等。

    然后你就可以执行你想要的查询而不必担心, like 并且你的数据更有用

  • 最好的解决方案是规范化您的架构。您应该有一个单独的表,每个子级占一行,而不是逗号分隔的列表。然后,您可以与此表连接以查找具有特定子级的父级。有关此示例,请参阅@themite 的答案。

    但如果由于某种原因你不能这样做,你可以使用 FIND_IN_SET :

    WHERE FIND_IN_SET('Alex', children)
    
  • Strawberry 和 kidA 都说了同样的话:你需要将“孩子”拆分成一个单独的表,然后将其链接回“父母”。这个过程称为“

  • 在一个表字段下存放多个子项不是一个好主意。最好创建第二个表来存储子项的名称,然后使用外键将其连接到主表。

返回
作者最近主题: