1

データベースに 2 つのテーブルがあります。テーブルは、bi_employee および hr_employee と呼ばれます。これらの 2 つのテーブルには類似した列がほとんどなく、各テーブルに固有のその他の追加の列があります。

いくつかのユーザー定義の列に基づいて、これら 2 つのテーブル間のデータを調整する必要があります。

一般的な列は、id(pk)、emp_code、地域、国、役職、部署などです。

これら 2 つのテーブルを調整するとき、両方のテーブルにあるが、一部の列だけが異なる行を確認したいと思います。

たとえば、emp_code 1000 は両方のテーブルに存在しますが、hr_employee では彼の役職は jr です。開発者ですが、bi_employee では、彼の役職は sr.developer です。

あるテーブルにあるが別のテーブルにはないレコードは必要ありません。

両方のテーブルに存在する行を調整するだけで済みますが、ユーザーが選択する列ごとに調整する必要があります。

ユーザーは、タイトル、地域、国、またはそれらすべてに基づいて調整することを選択できます。

助けてください。

編集1:

これは私がこれまでに行ったことであり、次のクエリを使用して、両方のテーブルにあるすべてのレコードを取得できました。次に、それらの列を比較して、不一致がないかどうかを確認する必要があります。

SELECT emp_code FROM bi_employee INTERSECT SELECT emp_code FROM hr_employee 
4

2 に答える 2

2

私が理解していることから、各テーブルのレコードを関連付ける列は 1 つしかありません。emp_code. emp_code次に、各 talbe で同じであるが、他のフィールドが異なるレコードを表示したいとします。

WHERE句の単純な結合とフィルターでそれを行うことができます...

SELECT
  *
FROM
  bi_employee
INNER JOIN
  hr_employee
    ON bi_employee.emp_code = hr_employee.emp_code
WHERE
     (bi_employee.title  <> hr_employee.title)
  OR (bi_employee.region <> hr_employee.region)
  etc, etc

(いずれかのフィールドが null 可能である場合は、 のようなものでそれを説明する必要がありますISNULL(bi.x, '') <> ISNULL(hr.x, ''))。

于 2012-05-11T09:27:55.833 に答える
0

あなたはこれを試すかもしれません。

select hr.<list of columns to reconcile from hr table> 
  from bi_employee bi join hr_employee hr on hr.emp_code = bi.empcode
minus
select bi.<list of columns to reconcile from bi table> 
  from bi_employee bi join hr_employee hr on hr.emp_code = bi.empcode
于 2012-05-11T09:28:25.197 に答える