提问人:user3479658 提问时间:2/21/2015 最后编辑:DNAuser3479658 更新时间:2/21/2015 访问量:3042
在列中使用多个值进行查询
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'"
所以我使用 - 这看起来很聪明,但
与此同时,我像亚历克斯一样开始了:(亚历山大
或者我想得到 dia,但结果是 dia 和 Diana :("where children LIKE '%Alex%'"
我怎样才能获得该数据类型的单个 Alex?
我希望我能用我糟糕的英语:D来解释我的问题
答:
0赞
thermite
2/21/2015
#1
应将数据拆分为两个表。
第一个看起来像这样
ID Name
1 Roberto
2 Maria
3 Mary
第二个像这样
ParentId child
1 Michael
1 Dia
2 John
2 Alex
等等。
然后,您可以进行所需的查询而不必担心,并且您的数据更加可用like
9赞
Barmar
2/21/2015
#2
最好的解决方案是规范化架构。您应该有一个单独的表,每个子表一行,而不是逗号分隔的列表。然后,您可以联接此表以查找具有特定子项的父项。有关这方面的例子,请参阅 @themite 的回答。
但是,如果由于某种原因无法执行此操作,则可以使用FIND_IN_SET
:
WHERE FIND_IN_SET('Alex', children)
0赞
Joep Beusenberg
2/21/2015
#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'
)
0赞
André Ferraz
2/21/2015
#4
我宁愿为孩子和父母做不同的桌子。
家长表
parent_id name
1 Roberto
2 Maria
3 Mary
儿童餐桌
children_id parent_id name
1 1 Michael
2 1 Dia
3 2 John
....等等
评论
0赞
Strawberry
2/21/2015
我只是在取笑你的成语:-)
0赞
André Ferraz
2/21/2015
好吧,我不想和他进行技术交流,因为看起来他知道的不多(基于他的问题)。
评论