我正试图在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查询?
由于
答案 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