0

私は2つのビューを持っています:

  1. VIEW5_SUMAすべてのアイテム (車) の価格の合計を含むビュー。これは 1 行であり、定数です。「結合」する必要があります。
  2. VIEW4_SUMA_AUTA特定のアイテム (車) のすべての収入の合計を含むビュー

SQL> SELECT * FROM VIEW5_SUMA ;

CELKOVA_TRZBA
-------------
         5806

SQL> SELECT * FROM VIEW4_SUMA_AUTA ;

TRZBA_AUTA    ID_AUTO
---------- ----------
       360          1
       ...        ...

すべてのアイテムの収入の割合を含む別のビューを作成する必要があります。VIEW5_SUMA問題は、 (総収入の定数)から選択した1行を「結合」して計算できるようにする方法がわからないことです。

これは私がこれまでに得たものですが、エラーを返します:

CREATE VIEW VIEW6 AS
SELECT
  t1.typ,
  t1.specifikacia_typu,
  t1.SPZ,
  t2.trzba_auta/(t3.celkova_trzba/100) AS percenta
FROM AUTA t1, VIEW5_SUMA t3
JOIN VIEW4_SUMA_AUTA t2 ON t1.id_auto = t2.id_auto
;
4

3 に答える 3

1

表示される問題は、JOINバインドがコンマよりもきついため、書いた内容が次と同等であるという事実によるものです

FROM AUTA t1, (VIEW5_SUMA t3 JOIN VIEW4_SUMA_AUTA t2 ON t1.id_auto = t2.id_auto)

t1括弧内にテーブルがないことを確認すると、これは機能しません。

つまり、バインドが希望どおりに機能するように順序を変更するだけです。

CREATE VIEW VIEW6 AS
 SELECT
  t1.typ,
  t1.specifikacia_typu,
  t1.SPZ,
  t2.trzba_auta/(t3.celkova_trzba/100) AS percenta
 FROM AUTA t1 JOIN VIEW4_SUMA_AUTA t2 ON t1.id_auto = t2.id_auto,
 VIEW5_SUMA t3
 ;

CROSS JOINまたは、カンマと同じものであるa を使用できます。これは、デカルト積になるか、 inner joinifwhere節がある場合に変化するためです。

 FROM AUTA t1 CROSS JOIN VIEW5_SUMA t3 JOIN VIEW4_SUMA_AUTA t2 ON (...)

 FROM AUTA t1 JOIN VIEW4_SUMA_AUTA t2 ON (...) CROSS JOIN VIEW5_SUMA t3

CROSS JOINa であるJOINため、予想される括弧があります((CROSS JOIN) JOIN )

于 2012-11-15T09:54:48.040 に答える
0

「エラーを返す」は、問題の診断には役立ちません。t1.id_autoそれは無効な識別子だと言っていると思います。

古い結合構文(句内の複数のカンマ区切りのテーブルとfrom句内の結合条件where) と「新しい」構文( joinand ) を混在onさせると混乱し、常に機能するとは限りません。とにかく、常に「新しい」構文を使用することをお勧めします。

でこれを行うことができますjoinが、そのフォームのみを使用する必要があります。t1と の間に結合条件がないためt3、 が必要ですcross join。これにより、2 つのテーブルのデカルト積が生成されますが、これは多くの場合、必要なものではありませんが、この場合、テーブルの 1 つに 1 つの行があるため、適切に見えます。

CREATE VIEW VIEW6 AS
SELECT
  t1.typ,
  t1.specifikacia_typu,
  t1.SPZ,
  t2.trzba_auta/(t3.celkova_trzba/100) AS percenta
FROM AUTA t1
CROSS JOIN VIEW5_SUMA t3
JOIN VIEW4_SUMA_AUTA t2 ON t1.id_auto = t2.id_auto

ビューの上にビューを構築することは常に良い考えではなく、パフォーマンスの問題を引き起こす可能性があります。

于 2012-11-15T09:56:08.340 に答える
0

ああ、質問を投稿した直後に 1 つの方法を見つけました。まったく使用JOINせずに、複数のテーブルを指定してFROMから、テーブルを結合するWHEREと機能します。

SELECT
  t1.typ,
  t1.specifikacia_typu,
  t1.SPZ,
  t2.trzba_auta/(t3.celkova_trzba/100) AS percenta
FROM AUTA t1, VIEW4_SUMA_AUTA t2, VIEW5_SUMA t3
WHERE
  t1.id_auto = t2.id_auto
;  

しかし、これを行う方法があるかどうかはまだ興味がありJOINます。

于 2012-11-15T09:31:23.383 に答える