在列中查询多个值
我有一张桌子,像:
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
…. 等等