2

我只需要从四个表中选择一个数据。

在我的“计算”表中,我有我需要的所有记录。

但我需要从'programs''term''imported'表中检索每条记录的其他信息。

'calculated'具有来自'programs' 的ID 。

但是,要从'imported'获得记录,我需要加入'item'表,因为 'item' 具有来自'programs'和来自'imported' 的ID 。

'term'具有来自'imported' 的ID 。

所以,我尝试了这个:

select  c.date,
    p.name,
    c.name1,
    c.name2,
    t.date,
    i.version,
    c.price1,
    c.price2,
    c.price3
from calculated c, programs p, term t, imported i, item it
where c.programs_id = p.programs_id
    and c.programs_id = it.programs_id
    and it.imported_id = i.imported_id
    and i.term_id = t.term_id;

但是当我在'calculated'上使用 count(*) 时,我得到了 30k 条记录,并且从我的 select 语句中我得到了超过 1.3 亿条记录。

我究竟做错了什么?

我应该怎么做才能使它起作用?

4

2 回答 2

0

你忘了加入term表。

可能你需要添加

and t.term_id = i.term_id
于 2013-02-28T01:03:50.780 回答
0

如果所有重复的行都是等价的,你可以像这样尝试

select  c.date,
    p.name,
    c.name1,
    c.name2,
    t.date,
    i.version,
    c.price1,
    c.price2,
    c.price3
from calculated c, programs p, term t, imported i
where c.programs_id = p.programs_id and
(select imported_id from item it where c.programs_id = it.programs_id and rownum = 1) = i.imported_id
and i.term_id = t.term_id;

其中“rownum = 1”是对 oracle 选择一行的限制。

于 2013-02-28T21:03:21.353 回答