请教一个 SQL

2015-03-16 15:58:28 +08:00
 a591826944
背景:三表联查。
其中一个表,有字段 area 值有: cn/sg/hk 等。。
另一个表有一个字段 country 值有两种可能,
1. country="cn" 这种比较简单,sql 中直接 area=country 来过滤
2. country="cn,sg,hk" 其实是想对应三个 area

请教第二种这种情况,sql 上有无方法可以达成
area IN ("cn","sg","hk") 这种效果?

或者有无更好存储方案?

3321 次点击
所在节点    MySQL
8 条回复
nori
2015-03-16 16:12:40 +08:00
如果我没理解错题面,写个分割函数吧。
yueyoum
2015-03-16 16:16:39 +08:00
如果是新項目, 那转用 postgres 吧

country 设置为 text[] 的 array 类型即可。

country @> array[area::text]
liprais
2015-03-16 16:18:10 +08:00
查查split函数吧
xiaozi
2015-03-16 16:18:57 +08:00
mysql 的 find_in_set 函数,不过不能走索引
linzy
2015-03-16 16:34:24 +08:00
建议再加一张mapping表
huigeer
2015-03-16 16:41:04 +08:00
area这种东西就不要用一个字段了, 多用几个字段会死?
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
a591826944
2015-03-16 18:22:02 +08:00
@xiaozi find_in_set 警察叔叔就是他。。感谢。索引问题数量不大,应该还可以。。

感谢大家的方案。。再加 mapping 也考虑过。。已经联查的有点多了。。mapping 不是太方便。。而且我这个需求可以不那么重。。。find_in_set 挺合适的。。总之感谢大家

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/177290

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX