1

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

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

假设常见的列是 id(pk)、emp_code、region、country、title、division 等。

现在,当我协调这两个表时,我想查看两个表中都存在但仅在某些列中不同的行。

例如,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

据我了解,每个表中只有一列与重新编码相关;emp_code. 然后你想显示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, ''))。

于 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 回答