在SQLite中存储/查询多个值

时间:2012-09-21 09:32:14

标签: sql sqlite

我正试图在SQLite3中为每棵树存储一个盛开的季节。目前我有字段“月”然后我将月份名称存储在字段中。例如

Tree Name     Month

Tree1         Jan,Feb,Mar
Tree2         Nov,Dec,Jan
Tree3         Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
Tree4         Mar,Apr,Nov,Dec
Tree5         Jan,Feb,Mar,Apr

我不确定这是否是存储它的最佳方式,任何建议都表示赞赏。

其次,我需要执行一个查询,我在月份输入,它应该返回与搜索条件匹配的树名称。例如

如果我搜索

 "Jan" 

结果应该是Tree1,Tree2,Tree3,Tree5

 "Jan,Feb,Mar"

结果应该是Tree1,Tree3,Tree5

 "Jan,Feb,Mar,Apr"

结果应为Tree5

 "Sep,Oct,Nov,Dec"

结果应为无

为了获得上述结果,我必须使用哪个SQL查询?

由于

2 个答案:

答案 0 :(得分:3)

没有。这不是存储它的最佳方式。

您应该规范化数据并每行存储一个月/树

Tree1         Jan
Tree1         Feb
Tree1         Mar 
Tree2         Nov
Tree2         Dec
Tree2         Jan
....

(或者可能将月份存储为数字1-12)

然后你可以

select treename from TreeBlooming where month = 'jan'

select treename from TreeBlooming
where month in ('jan','feb')
group by treename
having count(distinct month)=2

答案 1 :(得分:2)

您可以通过以下方式使用Group_concat

SELECT Group_concat(name) AS [tree name] 
FROM tree 
WHERE month LIKE '%Jan,Feb,Mar%'

查看 SQLFIDDLE