一列中有多个值的查询

jutyujz0  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(323)

我有一张这样的table:

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

我的问题是;我想知道谁的孩子叫亚历克斯。
我不能用 "where children = 'Alex'" 因为我在同一个单元格中有多个名称。
所以我用 "where children LIKE '%Alex%'" -这看起来很聪明,但同时我得到了所有的开始像亚历克斯:(亚历山德拉或我想得到迪亚,但结果是迪亚和戴安娜:(
我怎样才能在那个数据类型中得到一个alex?
我希望我能用我糟糕的英语来解释我的问题

cuxqih21

cuxqih211#

最好的解决方案是规范化您的模式。您应该有一个单独的表,每个子表有一行,而不是逗号分隔的列表。然后可以与此表联接以查找具有特定子级的父级。请参见@themite的答案以获取此示例。
但如果你因为某种原因不能这样做,你可以用 FIND_IN_SET :

WHERE FIND_IN_SET('Alex', children)
watbbzwu

watbbzwu2#

我宁愿为孩子和父母做不同的table之类的。
家长桌

parent_id     name            
1             Roberto         
2             Maria           
3             Mary

儿童桌

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

.... 等等

sbtkgmzw

sbtkgmzw3#

你应该把数据分成两个表。
第一个看起来像这样

ID    Name
1     Roberto
2     Maria
3     Mary

第二个是这样的

ParentId     child
1            Michael
1            Dia
2            John
2            Alex

等等。
然后你就可以做你想要的查询而不必担心 like 你的数据更有用

hrysbysz

hrysbysz4#

所以你想在这里摆两张table。

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

现在您可以使用连接或exists更有效地查询:

SELECT *
FROM Parents
WHERE EXISTS(
    SELECT * 
    FROM Children 
    WHERE parentid=Parents.id 
      AND Children.name='Alex'
 )

相关问题