当某列值有更名时,该怎样做比较好?

2016-01-08 07:52:56 +08:00
 billgreen1
我有一个表 table1 ,格式如下
id, company, col1,col2,...

company 里面有同一个公司发生更名情况。
比如 companyA 在 2010-01-01 以前 名字叫 abc , 2010-01-01 更名为 xyz 。

这样的公司可能有不少。
table1 的记录大概有一亿条左右, 10G+.
不会存在其他 也叫 abc/xyz 的情况。


场景: boss 说把 xyz 公司的 2000 年至今的数据调出来。或者把 abc 公司的 2000 年至今的数据调出来。
直接 select * from table1 where company = 'xyz' and date between date1 and date2
是不行的。

我的想法是另外做一张表 table2 ,
id, company, all_alias
1, abc, (abc,xyz)
2, xyz, (abc,xyz)

先从 table2 中查到其所有用过的名字,
然后用 select * from table1 where company in (select all_alias from table2 where company='abc')
and date between date1 and date2

请问这样做可行否,有没有什么更好的办法?
2776 次点击
所在节点    MySQL
10 条回复
lichao
2016-01-08 07:59:12 +08:00
只能说你们的数据库一开始设计得太业余,一开始就应该有一个 company 表, table1 中应该存 companyID ,而不是 companyName
luban
2016-01-08 08:20:38 +08:00
@lichao 现在做也可以,但是程序要改,原来那个字段就当冗余
imn1
2016-01-08 08:53:36 +08:00
深发展改平安银行?
理应 company 表
bk201
2016-01-08 08:54:29 +08:00
加一列 id ,然后打标记不行吗
wmjie
2016-01-08 09:27:18 +08:00
select * from table1 where company in ('xyz', 'xyz ' ) and date between date1 and date2
Alphabetcn
2016-01-08 12:03:07 +08:00
数据库太业余
billgreen1
2016-01-08 13:23:52 +08:00
@lichao, 恩,是太业余,我自己包括周围的人都喜欢一张表搞定,本身列数目就不多。
billgreen1
2016-01-08 13:24:34 +08:00
@Alphabetcn 赞同加没有帮助,:-)
billgreen1
2016-01-08 13:25:30 +08:00
@imn1, 嘻嘻,不是的,举公司的例子只是为了方便描述我的问题。
billgreen1
2016-01-08 13:26:05 +08:00
@luban 能稍微详细说点么,多谢啦,你的回答是最有帮助的。

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

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

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

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

© 2021 V2EX