【发布时间】:2014-06-24 20:51:51
【问题描述】:
我们有一个非常古老的自定义数据库(oracle、mysql、derby),但有以下限制:没有新的表文件、没有视图、没有函数、没有过程。
我的表 MYTABLE:
| id | ... | parent_id |
------------------------
| 1 | ... | |
| 2 | ... | 1 |
| 3 | ... | 1 |
| 4 | ... | 2 |
| 5 | ... | 1 |
我的第一句话:
select * from MYTABLE where id in ('1','2','3','4','5');
给出我的 5 条记录。
然后我需要有关第一个(没有更深的)子 ID 的信息。 我目前的解决方案:
for (record in records) {
// get child ids as comma separated string list
// e.g. "2,3,5" for id 1
String childIds = getChildIds(record.id);
}
用getChildIds(record.Id)中的第二条语句:
select id from MYTABLE where parent_id='record.Id';
所以我有 1 + 5 = 6 条语句来获取所需信息。
我正在寻找一种解决方案,从以下“虚构”表中选择具有“虚构”字段“child_ids”的记录:
| id | ... | parent_id | child_ids |
------------------------------------
| 1 | ... | | 2,3,5 |
| 2 | ... | 1 | 4 |
| 3 | ... | 1 | |
| 4 | ... | 2 | |
| 5 | ... | 1 | |
有谁知道我如何只用一个语句(或 2 个语句)来获取这些信息?
谢谢你的帮助,托马斯
【问题讨论】:
-
最后一个表不是真正的表。我需要(但我没有)这个表只用于一个 select 语句。
标签: mysql sql oracle select optimization