2013-11-18 4 views
1

У меня есть два набора данных (csv-файлы), которые содержат вхождения столбцов базы данных ключей и количество раз, когда они появляются. (Не оригинальные таблицы базы данных больше не доступны)Соответствие перестановок столбцов в двух наборах данных

Например:

множества 1

 
column 1 column 2 column 3 count 
1   2   3   100 
1   2   2   200 
3   1   1   700 

набор 2

 
column 1 column 2 column 3 count 
1   2   3   500 
1   2   2   133 
1   1   1   100 

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

Я думаю, что g написания сценария, который будет проходить через набор с вложенным циклом для набора 2, но мне было интересно, есть ли лучший способ сделать это.

Открыт для предложений?

Спасибо!

ответ

1

Вы не указали свои СУБД, так что это ANSI SQL:

Чтобы получить комбинации в table2, которые не в table1:

select col1, col2, col3 
from table_1 
except 
select col1, col2, col3 
from table_2; 

Чтобы получить комбинации в table1, которые не в table2:

select col1, col2, col3 
from table_2 
except 
select col1, col2, col3 
from table_1; 

Чтобы получить оба в одном заявлении:

(
    select col1, col2, col3 
    from table_1 
    except 
    select col1, col2, col3 
    from table_2 
) 
union all 
(
    select col1, col2, col3 
    from table_2 
    except 
    select col1, col2, col3 
    from table_1 
); 

SQLFiddle пример: http://sqlfiddle.com/#!15/71566/1

1

Нет петель Пожалуйста :)

select t1.* 
from t1 left join t2 on t1.col1 = t2.col1 and t1.col2 = t2.col2 and t1.col3 = t2.col3 
where t2.col1 is null 

Left присоединяется создать аннулирует, где не найдено ни одной записи. Левое соединение t1-t2 и все времена, когда t2 равно нулю, означает, что запись в t1 не соответствует в t2.

Измените это на правое соединение и где t1.col1 равно null, и вы увидите все t2 не в t1.

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