一列中有多个值的查询

jutyujz0  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(346)

我有一张这样的table:

  1. id name children
  2. 1 Roberto Michael,Dia
  3. 2 Maria John,Alex
  4. 3 Mary Alexandre,Diana

我的问题是;我想知道谁的孩子叫亚历克斯。
我不能用 "where children = 'Alex'" 因为我在同一个单元格中有多个名称。
所以我用 "where children LIKE '%Alex%'" -这看起来很聪明,但同时我得到了所有的开始像亚历克斯:(亚历山德拉或我想得到迪亚,但结果是迪亚和戴安娜:(
我怎样才能在那个数据类型中得到一个alex?
我希望我能用我糟糕的英语来解释我的问题

cuxqih21

cuxqih211#

最好的解决方案是规范化您的模式。您应该有一个单独的表,每个子表有一行,而不是逗号分隔的列表。然后可以与此表联接以查找具有特定子级的父级。请参见@themite的答案以获取此示例。
但如果你因为某种原因不能这样做,你可以用 FIND_IN_SET :

  1. WHERE FIND_IN_SET('Alex', children)
watbbzwu

watbbzwu2#

我宁愿为孩子和父母做不同的table之类的。
家长桌

  1. parent_id name
  2. 1 Roberto
  3. 2 Maria
  4. 3 Mary

儿童桌

  1. children_id parent_id name
  2. 1 1 Michael
  3. 2 1 Dia
  4. 3 2 John

.... 等等

sbtkgmzw

sbtkgmzw3#

你应该把数据分成两个表。
第一个看起来像这样

  1. ID Name
  2. 1 Roberto
  3. 2 Maria
  4. 3 Mary

第二个是这样的

  1. ParentId child
  2. 1 Michael
  3. 1 Dia
  4. 2 John
  5. 2 Alex

等等。
然后你就可以做你想要的查询而不必担心 like 你的数据更有用

展开查看全部
hrysbysz

hrysbysz4#

所以你想在这里摆两张table。

  1. parents:
  2. id name
  3. 1 Roberto
  4. 2 Maria
  5. 3 Mary
  6. children:
  7. id parentid name
  8. 1 1 Michael
  9. 2 1 Dia
  10. 3 2 John
  11. 4 2 Alex
  12. 5 3 Alexandre
  13. 6 3 Diana

现在您可以使用连接或exists更有效地查询:

  1. SELECT *
  2. FROM Parents
  3. WHERE EXISTS(
  4. SELECT *
  5. FROM Children
  6. WHERE parentid=Parents.id
  7. AND Children.name='Alex'
  8. )
展开查看全部

相关问题