2012-05-11 1 views
1

У меня есть две таблицы в базе данных. Таблицы называются bi_employee и hr_employee. Эти две таблицы имеют несколько похожих столбцов, а затем другие дополнительные столбцы, характерные для каждой таблицы.Как согласовать общие строки в двух таблицах по столбцу в оракуле?

Мне нужно согласовать данные между этими двумя таблицами на основе определенных пользовательских столбцов.

Допустим, общие столбцы идентификатор (рк), emp_code, регион, страна, название, подразделение и т.д.

Теперь, когда я примирить эти две таблицы, я хотел бы видеть строки, которые есть в обоих таблицы, но только в некоторых столбцах.

например. emp_code 1000 присутствует в обеих таблицах, но в hr_employee его заголовок - jr. разработчик, но в bi_employee его название sr.developer.

Мне не нужны записи, которые находятся в одном столе, но не в другой таблице.

Мне нужно только сверять строки, которые присутствуют в обеих таблицах, но по столбцу, которые будут выбраны пользователем.

Пользователь может выбирать для согласования на основе названия или региона или страны или всех их.

Пожалуйста, помогите.

EDIT 1:

Это то, что я сделал до сих пор, с помощью следующего запроса я мог бы получить все записи, которые есть в обеих таблицах. Теперь мне просто нужно сравнить их столбцы, чтобы увидеть, есть ли какие-либо несоответствия.

SELECT emp_code FROM bi_employee INTERSECT SELECT emp_code FROM hr_employee 
+0

Является ли конечная цель здесь, чтобы таблица BI соответствовала таблице HR, или вам действительно нужно получить отчет о различиях? –

+0

@ Давид Олдридж. Мне просто нужно получить отчет о различиях. – ashishjmeshram

ответ

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, '')).

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 
Смежные вопросы