有10张表, 名字是 table_N
, N
是第几张, 范围0-9
所有表的结构都一样:
id:
唯一
id, 不会和其他表的重复name: 名称, 也不会重复
就是说, 这10张表中不会出现相似的记录. id
和 name
都不会重复.
现在, 每张表有几百条记录, 而我想通过 name
来查询出 数据是存放在哪张表的, 并且查询出他的 id
.
由于条件限制, 不能创建其他单独的表来用作记录数据存在哪个表的.
有10张表, 名字是 table_N
, N
是第几张, 范围0-9
所有表的结构都一样:
id: 唯一
id, 不会和其他表的重复
name: 名称, 也不会重复
就是说, 这10张表中不会出现相似的记录. id
和 name
都不会重复.
现在, 每张表有几百条记录, 而我想通过 name
来查询出 数据是存放在哪张表的, 并且查询出他的 id
.
由于条件限制, 不能创建其他单独的表来用作记录数据存在哪个表的.
比较蠢的方法是这样:
SELECT 'table_0', id FROM table_0 WHERE name = ?
UNION
SELECT 'table_1', id FROM table_1 WHERE name = ?
UNION
...
SELECT 'table_9', id FROM table_9 WHERE name = ?
然而不蠢的方法我还没想到
我想到的查询语句是这样的:
select * from (select id,name,'table0' as t from table_0 union all select id,name,'table1' as t from table_1 union all select id,name,'table2' as t from table_2 ......) as t where t.name = ?
从功能设计来讲,拆表后一般不需要考虑数据是从哪一张表获取的,因为在哪一张表完全是系统内部的事情,对业务来讲没有意义。
depress说的查询方法是可行的,或者是在表内部一个标识字段能说明是哪一张表。
比较理想的办法是表拆分和ID和一定的规律,拿到ID后可以直接判断属于哪一张表,也省去了做UNION查询的麻烦。如按照ID大小,每一百万是一张表,这样拿到ID可以直接判断出属于哪一张表。
5 回答3.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答1.8k 阅读
3 回答2k 阅读
最好存储的时候根据name有个路由规则到这十个表中,如果是多维度查询推荐使用es