2

1つだけに基づいて4つのテーブルからデータを選択する必要があります。

「計算された」テーブルには、必要なすべてのレコードがあります。

ただし、 「programs」「term」、および「imported」テーブルから、レコードごとに他の情報を取得する必要があります。

「計算された」は「プログラム」からの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億3000万を超えるレコードが取得されます。

私は何が間違っているのですか?

これを機能させるにはどうすればよいですか?

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 の 1 行の選択に対する制限です。

于 2013-02-28T21:03:21.353 に答える