0

私は初めて SQL の世界に足を踏み入れた学生ですが、to_somedatatype(null) を使用して UNION や INTERSECT などで欠落している列を置き換える方法に関する明確でわかりやすいドキュメントが見つかりません。HR を使用しています。最初のいくつかのプロジェクトでは Oracle Database に組み込まれているスキーマがあり、次のクエリが機能します (扶養家族を持つ従業員のみの employee_id 番号のリストを取得します)。

SELECT employee_id "Employees with Dependents"
FROM employees
INTERSECT
SELECT relative_id
FROM dependents;

しかし、従業員の名前と扶養家族の生年月日を含めたいと思ったらすぐに行き詰まります。このバリエーションは、エラーのない検索を実行しますが、結果が得られません (「行が選択されていません」と出力されます)。

SELECT e.employee_id "Employees with Dependents",
  e.first_name,
  e.last_name,
  to_date(NULL) "Dependent Birthdate"
FROM employees e
INTERSECT
SELECT d.relative_id,
  TO_CHAR(NULL),
  TO_CHAR(NULL),
  d.birthdate
FROM dependents d;

to_date を to_number に置き換えるか、単純な null と to_char を to_varchar2 または null に置き換えるいくつかのバリエーションでは、行が生成されません。

私が生成したいのは、保護者の従業員番号、名、姓、および扶養家族の生年月日を表示する扶養家族ごとに 1 つの行です。私の問題は、これらの null プレースホルダーの使用と、一般的な集合演算子の理解が限られていることにあると確信しています。(私の理解では、to_date(null) のような null プレースホルダーを使用した場合、比較するものが何もないため、比較に含まれません。)

これらのプレースホルダーを適切に使用する方法を誰かに説明してもらえますか?

4

2 に答える 2

0

クエリが機能しない理由は、対応するフィールドに NULL 値がないためです。を使用してINTERSECTいます。実際には、次のようにテーブルを結合したいと考えています。

SELECT e.employee_id "Employees with Dependents",
  e.first_name,
  e.last_name,
  d.birthdate "Dependent Birthdate"
FROM employees e join
     dependents d
     on d.relative_id = e.employee_id
于 2013-01-21T23:35:11.917 に答える