2013-02-27 107 views
2

我需要從四個表中選擇僅基於一個的數據。選擇多個具有相同ID的表格

在我的'計算'表中,我有我需要的所有記錄。

但我需要檢索每個記錄一些其他的信息,從「程序」「術語」「進口」表。

'計算'有ID從'程序'

但是,從達到創紀錄的「進口」,我需要加入「項目」表,因爲「項目」從具有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語句中我獲得超過130個百萬記錄。

我在做什麼錯?

我應該怎麼做才能工作?

回答

0

如果所有重複行是等價的,U可以嘗試這樣

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。

+0

感謝Koroed的幫助,但今天我被告知不再需要使用這個sql語句。那時我能夠成功檢索數據。謝謝大家的幫助。我很感激。 – LuizFranco 2013-03-01 21:38:12

0

您忘記加入term表。

也許你需要添加

and t.term_id = i.term_id 
+0

您好,我已經糾正了我的sql語句。 'term'表已經加入,但是有錯誤的別名。 – LuizFranco 2013-02-28 03:16:17

+1

好的,所以在這種情況下,您可能在某些表格中存在一對多的關係。例如。首先想到的是有多個項目(表格'item')在一個批次(表格'導入')中導入。嘗試逐一排除表以查看哪一個導致複製 – cha 2013-02-28 03:38:53

+0

謝謝Cha。我發現'calculate'和'item'之間的連接會導致重複。那麼,我該如何解決這個問題? – LuizFranco 2013-02-28 13:13:07

相關問題