我有一个名为“愿意”的数据库字段,其填充的文字如下:
shopping,pool,pc,games
shopping,pool,pc,games
swimming, pool, pc, games
我需要sql查询来查询里面有“购物”的文件?
TY
答案 0 :(得分:1)
您可以使用LIKE运算符来实现此目的。例如,
SELECT * FROM myTable
WHERE willingness LIKE '%shopping%'
但是,如果该字段只是存储以逗号分隔的标记列表,则可能需要更改模式 - 就目前而言,模式未规范化。例如,该表可以包含具有相应外键的UserId
和WillingnessTagId
列。
答案 1 :(得分:1)
从table1中选择*,其中愿意为'%shopping%'
答案 2 :(得分:1)
非常低效,因为这应该是normalized,但应该有效:
SELECT *
FROM table
WHERE willingness LIKE '%shopping%'
在规范化数据库中,您将拥有一个意愿表,其中包含每个(对于购物而言为1)和此查找表的foreign key的ID。然后查询会更有效:
SELECT *
FROM table
WHERE willingness_id = 1
答案 3 :(得分:1)
这就是我们规范化的原因。
AND (willingness = 'shopping'
OR willingness like 'shopping,%'
OR willingness like '%,shopping'
OR willingness like '%,shopping,%'
OR willingness like '%, shopping'
OR willingness like '%, shopping,%')
答案 4 :(得分:0)
这应该足够了:
select *
from table
where willingness like '%shopping%'
这将在sql server中运行
答案 5 :(得分:0)
这应该是JOB:
select willingness from table where willingness LIKE '%shopping%'
我建议你阅读MYSQL语句中的字符串比较: http://dev.mysql.com/doc/refman/5.0/fr/string-comparison-functions.html
我假设您使用的是MySQL,如果没有,请告诉我们您使用的是什么。
答案 6 :(得分:0)
您不应该像这样将数据存储在数据库中。让我解释一下:
你可以使用人们在这里提到的解决方案(like %shopping%
等),但你确实以某种方式遇到麻烦。
了解规范化。您可以使用willingness
表,而不是willingness
字段,看起来像这样:
person_id willing
1 pool
2 shopping
2 pool
3 swimming
3 games
等
然后您只需要select distinct person_id from willingness where willing = "pool"
之类的查询。就是这样 - 更安全,也可能更快。