1

私はオラクルで宿題をしています。

複雑なビューを作成する必要があり、ビューを作成した後、それを変更する必要があります。

質問は、ビューの作成は、存在しない場合の状況を処理できなければならないことを示してdepartment_nameいます。これを使う必要があるかどうかわかりませんNVL(d.department_name, 'No department established yet')

2 番目の質問は、ビューを変更して、列名を department_name などのエイリアスに変更し、ビューに含まれていない他の国をビューに含める必要があることです。以下は私が作成したビューです。助けが必要です。

CREATE VIEW jack_vu AS
SELECT NVL(d.department_name, 'No department established yet') "department_name"
     , l.city
     , l.state_province
  FROM locations l 
  JOIN departments d
    ON (l.location_id = d.location_id)
 WHERE UPPER(l.country_id) LIKE 'CA'
    OR UPPER(l.country_id) LIKE 'IT';
4

2 に答える 2

2

あなたはここで正しい軌道に乗っているようです。NVL 関数は null 値を処理するために使用されるため、問題ないようです。エイリアス「department_name」を既に使用しています。通常の列にエイリアスを使用することもできます。つまり、column_name をテーブルから「エイリアス」として選択します。

「ビューの作成または置換 ...」を使用して、既存のビューを変更することもできます。

于 2012-08-09T06:36:41.970 に答える
1

NVL() は正しいことですが、クエリが「INNER JOIN」を使用しているため、deparment_name の値が null になることはありません (departments テーブルに格納されていない限り)。

あなたが望むのは、(まだ)部門に割り当てられていない場所を結果に含める場所と部門の間の外部結合を使用することです。

LIKE 演算子は必要ありません。あなたが平等チェックをしているので。国の追加を簡単にするために、IN演算子を使用すると入力が少なくなります (ただし、演​​算子は問題なくOR機能します) 。

SELECT ...
FROM locations l 
  LEFT JOIN departments d ON (l.location_id = d.location_id) -- the LEFT is the difference
WHERE UPPER(l.country_id) IN  ('CA','IT'); -- add more countries here.

ここで何が起こっているのか理解できない場合は、外部結合について調べてみてください (例: http://www.devx.com/dbzone/Article/17403/1954?pf=true )

NVL 関数の結果に別名「department_name」を指定することで、既に使用している新しい名前を列に付ける方法は既にご存じでしょう。したがって、「Departments」という名前にする必要がある場合は、名前を変更してください。個人的ASには、列エイリアスを導入するために使用することを好みます。意図が明確になると思います。

SELECT NVL(d.department_name, 'No department established yet') as "Departments" 
于 2012-08-09T06:55:14.340 に答える