背景:三表联查。
其中一个表,有字段 area 值有: cn/sg/hk 等。。
另一个表有一个字段 country 值有两种可能,
1. country="cn" 这种比较简单,sql 中直接 area=country 来过滤
2. country="cn,sg,hk" 其实是想对应三个 area
请教第二种这种情况,sql 上有无方法可以达成
area IN ("cn","sg","hk") 这种效果?
或者有无更好存储方案?
背景:三表联查。
其中一个表,有字段 area 值有: cn/sg/hk 等。。
另一个表有一个字段 country 值有两种可能,
1. country="cn" 这种比较简单,sql 中直接 area=country 来过滤
2. country="cn,sg,hk" 其实是想对应三个 area
请教第二种这种情况,sql 上有无方法可以达成
area IN ("cn","sg","hk") 这种效果?
或者有无更好存储方案?
|
noriMar 16, 2015
1
如果我没理解错题面,写个分割函数吧。
|
|
yueyoumMar 16, 2015
2
如果是新項目, 那转用 postgres 吧
country 设置为 text[] 的 array 类型即可。 country @> array[area::text] |
|
F281M6Dh8DXpD1g2Mar 16, 2015
3
查查split函数吧
|
|
xiaoziMar 16, 2015
4
mysql 的 find_in_set 函数,不过不能走索引
|
|
linzyMar 16, 2015
5
建议再加一张mapping表
|
|
huigeerMar 16, 2015
6
area这种东西就不要用一个字段了, 多用几个字段会死?
|
|
66betaMar 16, 2015
7
一般再加一张表,解耦、防冗余、便扩展
表A: 1 cn 2 hk 3 sg 表B: 1 aaa 2 bbb 3 ccc 表C B.1 a.1 B.1 a.2 B.1 a.3 |
|
8
@xiaozi find_in_set 警察叔叔就是他。。感谢。索引问题数量不大,应该还可以。。
感谢大家的方案。。再加 mapping 也考虑过。。已经联查的有点多了。。mapping 不是太方便。。而且我这个需求可以不那么重。。。find_in_set 挺合适的。。总之感谢大家 |