在列中查询多个值

我有一张桌子,像:

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和戴安娜:(

我怎样才能得到这个数据类型的单个亚历克斯?

我希望我能用我可怕的英语解释我的问题: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 

等等。

那么你可以做你想要的查询,而不必担心,你的数据更有用

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

 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 

…. 等等