我在数据库中有两个表。这些表称为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
答案 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