[英]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.