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