如何在oracle中以列方式协调两个表中的公共行?

时间:2012-05-11 08:32:12

标签: sql oracle

我在数据库中有两个表。这些表称为bi_employee和hr_employee。这两个表几乎没有相似的列,然后是每个表特有的其他额外列。

我需要根据一些用户定义的列来协调这两个表之间的数据。

让我们说公共列是id(pk),emp_code,region,country,title,division等。

现在,当我调和这两个表时,我希望看到两个表中的行,但只在某些列中有所不同。

e.g。 emp_code 1000在两个表中都是prsent,但在hr_employee中,他的标题是jr。开发人员,但在bi_employee,他的头衔是sr.developer。

我不希望一个表中的记录而不是另一个表中的记录。

我只需要协调两个表中存在的行,但是要按照用户选择的列方式进行协调。

用户可以选择根据标题,地区或国家或所有人进行协调。

请帮忙。

编辑1:

这是我到目前为止所做的,通过以下查询,我可以获得两个表中的所有记录。现在我只需要比较它们的列,看看是否有任何不匹配。

SELECT emp_code FROM bi_employee INTERSECT SELECT emp_code FROM hr_employee 

2 个答案:

答案 0 :(得分:2)

据我所知,每个表中只有一列与recode相关; emp_code。然后你想要显示每个talbe中emp_code相同的记录,但其他字段是不同的。

您可以通过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

(如果任何字段可以为空,则需要使用ISNULL(bi.x, '') <> ISNULL(hr.x, ''))来解释该字段。

答案 1 :(得分: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