我有一张表:
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
答案 0 :(得分:6)
最佳解决方案是规范化架构。您应该有一个单独的表,每个子项都有一行,而不是逗号分隔的列表。然后,您可以加入此表以查找具有特定子项的父项。有关此示例,请参阅@ themite的答案。
但如果由于某种原因你不能这样做,你可以使用FIND_IN_SET
:
WHERE FIND_IN_SET('Alex', children)
答案 1 :(得分:0)
您应该将数据拆分为两个表。
第一个看起来像这样
ID Name
1 Roberto
2 Maria
3 Mary
第二个就像这样
ParentId child
1 Michael
1 Dia
2 John
2 Alex
等等。
然后您可以执行所需的查询,而无需担心like
并且您的数据更有用
答案 2 :(得分:0)
这就是为什么你想在这里有两张桌子。
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
现在,您可以使用join或exists更有效地查询:
SELECT *
FROM Parents
WHERE EXISTS(
SELECT *
FROM Children
WHERE parentid=Parents.id
AND Children.name='Alex'
)
答案 3 :(得分:0)
我宁愿为孩子和父母制作不同的表格。
父母表
parent_id name
1 Roberto
2 Maria
3 Mary
儿童表
children_id parent_id name
1 1 Michael
2 1 Dia
3 2 John
....等等