繁体   English   中英

查询一列中有多个值

[英]Query with multiple values in a column

我有一张像这样的桌子:

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

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

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

所以我使用"where children LIKE '%Alex%'" ——这看起来很聪明,但同时我也开始像亚历克斯一样:( 亚历山大或者我想得到 dia 但结果是 dia 和 diana:(

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

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

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

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

WHERE FIND_IN_SET('Alex', children)

您应该将数据拆分为两个表。

第一个看起来像这样

ID    Name
1     Roberto
2     Maria
3     Mary

第二个像这样

ParentId     child
1            Michael
1            Dia
2            John
2            Alex

等等。

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

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

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'
 )

我宁愿为孩子和父母做不同的桌子,像这样。

家长表

parent_id     name            
1             Roberto         
2             Maria           
3             Mary     

儿童桌

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

.... 等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM