带有“with和in子句”的SQL查询

时间:2011-02-20 17:22:43

标签: sql mysql

我有一个表存储用户名,爱好和城市.hobby字段包含使用“,”操作员加入的不同爱好,例如游泳,篮子,板球。我想根据我的搜索条件搜索至少匹配一个爱好的用户名。

3 个答案:

答案 0 :(得分:1)

一列中不应包含多个属性。这是3nf数据库设计的头号规则之一。现在你必须找出解析这些数据的方法。这个问题每天都变得越来越糟。将业余爱好分隔为数据库中的多行。

答案 1 :(得分:0)

我同意@JonH一栏中不应该有多条信息。它阻止行真正原子化。

但是你就在那里,你可以使用LIKE子句返回与列中子字符串匹配的行。

类似的东西:

select hobbycolumn from hobbytable where hobbycolumn like '%swimming%'

例如

答案 2 :(得分:0)

要正确执行此操作,您需要重新构建表格(如果可能)。对于你正在寻找的可能的方法是有3个表。我不确定这个城市属于谁,所以我把它放在了用户身上。

带有以下列的user

1:

  • ID
  • 名称
  • 城市

hobbies的表格:

  • ID
  • 名称

一个user_hobbies联接表,允许每个用户拥有多个爱好,并且每个爱好都有多个用户:

  • ID
  • user_id(外键)
  • hobby_id(外键)

然后搜索具有某种爱好的用户是:

SELECT user.id, user.name FROM user
INNER JOIN 'user_hobbies' on user_hobbies.user_id=user.id
INNER JOIN 'hobbies' on hobbies.id = user_hobbies.hobby_id
WHERE hobbies.name LIKE "query";