我需要仅根据一个表从四个表中选择数据。
在我的'计算'表中,我有我需要的所有记录。
但我需要从'程序','术语'和'导入'表中检索每条记录的其他信息。
'计算'具有来自'计划'的ID 。
但是,要从'导入'获得记录,我需要加入'item'表,因为'item'包含来自'程序的ID '和'导入'。
'term'的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;
但是当我在'计算'上使用count(*)时,我得到了30k的记录,而且从我的select语句中我获得了超过1.3亿条记录。
我做错了什么?
我应该怎样做才能发挥作用?
答案 0 :(得分:0)
您忘了加入term
表。
可能你需要添加
and t.term_id = i.term_id
答案 1 :(得分:0)
如果所有重复行都是等效的,你可以像这样尝试smth
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选择一行的限制。