2015-06-03 5 views
0

У меня есть две таблицы A и B. Таблица A имеет записи 36460090, тогда как таблица B имеет несколько меньших записей, чем таблица A. Таблица B является подмножеством таблицы A. Я хочу передать только те записи из таблицы A в таблицу B, которые не указаны в таблице B. В обеих таблицах нет первичного ключа. Кроме того, таблица A и таблица B могут содержать дубликаты записей. Как я могу выполнить эту передачу? Это код ниже:Большой объем передачи данных

select a.* , b.id 
into #temp 
from TableA a 
left join TableB b 
on a.id=b.id , a.var1=b.var1 ,a.var2=b.var2 .... , a.var12=b.var12 
+0

Можете ли вы показать код, который вы пробовали? –

+0

выберите a. *, B.id в #temp from TableA a left join TableB b на a.id = b.id, a.var1 = b.var1, a.var2 = b.var2 ... ., a.var12 = b.var12 Теперь #temp содержит больше записей, чем TableA, и вы, возможно, знаете, почему это –

+0

@abdulsammad, вы должны поместить свой код в вопрос. – hoss

ответ

0

для выбора строк в том, что не в Ъ:

select a.* 
from a 
where a.id in(select id from a 
       except 
       select id from b); 

второе решение:

select a.* 
from a 
where not exists(select 1 
       from b 
       where b.id = a.id); 
+0

Будет ли это работать, если Id не является первичным ключом, значит, такое же значение id для разных записей ? @stevanuz –

+0

Поскольку обе таблицы имеют столбец id и совместимый тип данных, тогда задание операции должно работать. с точки зрения производительности без индекса, он не будет работать хорошо, потому что он будет просто сканировать. – stevanuz

+0

, если в A есть две записи с id = 2, но одна запись в B с id = 2, то этот оператор не будет выбирать вторую запись A с id = 2 –

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