1

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"

結果はnoneでなければなりません

上記の結果を得るには、どの SQL クエリを使用する必要がありますか?

ありがとう

4

2 に答える 2

3

いいえ、これは最良の保管方法ではありません。

データを正規化し、行ごとに 1 つの月/ツリーを保存する必要があります

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
于 2012-09-21T09:35:56.167 に答える
2

次の方法でGroup_concatを使用できます。

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

SQLFIDDLEをチェックしてください

于 2012-09-21T09:47:31.213 に答える