2015-03-12 5 views
1

данные, так как (Table1 ссылки до table2) на table1.col2 = table2.col2Различия между двумя столами

На основе этого критерия,

Сотрудник 5 ниже присваивается области 1 в первой таблице однако во второй таблице, работник не назначен в Зону 1, так что результат, что возвращение было бы только первая запись первой таблицы (emp5, a1)

Пример ниже

Table1

Col1 Col2 
------------- 
emp5  A1 
emp6  A1 
emp5  A2 

Table2

Col1  Col2 
-------------- 
emp7  A1 
emp6  A1 
emp5  A2 
+1

Что вы думаете? – Schwern

ответ

0

Это сложно. Вам нужны сотрудники, которые находятся в обеих таблицах. Затем вам нужно проверить, что col2 отличается в одной из строк.

Следующая делает это сравнение с помощью union all:

select col1, col2, max(which) 
from ((select col1, col2, 1 as which 
     from table1 t1 
     where exists (select 1 from table2 t2 where t2.col1 = t1.col1) 
    ) union all 
     (select col1, col2, 2 as which 
     from table2 t2 
     where exists (select 1 from table1 t1 where t2.col1 = t1.col1) 
    ) 
    ) tt 
group by col1, col2 
having count(*) = 1 

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

+0

srry, не смог заставить его работать, theres ошибка около 'tt' – user406151

+0

@ user406151. , , Ошибка была отсутствующими скобками. –

+0

ОК, спасибо, я только что открыл его. – user406151

0
select table1.* 
    from table1 
    left join table2 
    on table1.col1 = table2.col1 
    and table1.col2 = table2.col2 
where table2.col1 is null 

, если вы хотите только те из таблицы 1, которые также назначены на другой проект, то

select distinct table1.* 
    from table1 
    join table2 as t2not 
    on t2not.col1 = table1.col1 
    and t2not.col2 <> table1.col2 
    left join table2 
    on table1.col1 = table2.col1 
    and table1.col2 = table2.col2 
where table2.col1 is null 
1

Вы можете использовать МИНУС, более интуитивным. Синтаксис может отличаться в SQL Server, MySQL или Oracle, как вы можете увидеть http://blog.sqlauthority.com/2008/08/07/sql-server-except-clause-in-sql-server-is-similar-to-minus-clause-in-oracle/

Но мне нравится МИНУС, например

select 
    t1.Col1, 
    t1.Col2 
from table1 t1 
MINUS 
select 
    t2.Col1, 
    t2.Col2 
from table2 t2 

Таким образом, вы можете думать, как наборы (математика)!

+1

Является ли MINUS таким же, как и EXCEPT от ANSI SQL? – jarlh

+0

@jarlh да, вы правы, ЗА ИСКЛЮЧЕНИЕМ тот же –

Смежные вопросы