2016-03-09 4 views
1

У меня есть таблица Product:Вставка данных в запросе в SQL Server

Name  Description 
---------------------- 
    x   1 
    y   2 
    z   3 

У меня есть еще один стол Producttemp:

Name Description 
------------------ 
    x   1 
    x   1 
    x   2 
    r   3 
    r   3 
    z   8 
    z   8 

Мне нужно вставить данные из Producttemp в Product и только что данные, которые находятся в комбинации Name и Description.

Так как сейчас x,1 не должны быть вставлены, потому что эта комбинация уже существует в таблице Product и только (r,1) и (z,8) должна быть вставлена, и мы не должны вставлять повторяющиеся комбинации.

Я пытаюсь с этим запросом:

create table #vhf (pk_id numeric) 

INSERT INTO product (product_name, product_description) 
OUTPUT INSERTED.* INTO #vhf 
    SELECT 
     temp.product_name, 
     temp.product_description 
    FROM 
     producttemp 
    WHERE 
     NOT EXISTS (SELECT distinct temp.product_name FROM product prj, product temp 
        WHERE temp.product_description = prj.product_description 
         AND temp.product_name = prj.product_name) 

Этот запрос возвращает все значения, которые не существуют в таблице продукта, но он также вставив повторяющиеся строки

+0

Пожалуйста, проверьте ваш вопрос и исправить опечатки. В этом примере нет '(r, 1)'. С другой стороны, в примере есть '(x, 2)', почему вы не хотите вставлять эту комбинацию? –

ответ

0

Попробуйте один

INSERT INTO [Product] 
SELECT DISTINCT PT.[Name],PT.[Description] 
FROM [Producttemp] AS PT 
LEFT OUTER JOIN [Product] AS P ON P.[Name] = PT.[Name] 
     AND P.[Description] = PT.[Description] 
WHERE P.[Name] IS NULL 
+0

Он решил мою проблему – Deepti

1

Попытка де-простофиля совершенно неверно.

Делают это так:

... 
SELECT pt.product_name, 
     pt.product_description 
FROM producttemp pt 
where NOT EXISTS (SELECT * FROM product prj 
where pt.product_description=prj.product_description 
and pt.product_name=prj.product_name 
) 
+0

Даже тогда я получаю дубликаты из своей временной таблицы – Deepti

+0

Если в таблице 'ProductTemp' есть дубликаты, то вы должны отменить ее до начала этого шага. Существует множество примеров удаления дубликатов таблицы уже на SO. –

+0

http://stackoverflow.com/questions/18390574/how-to-delete-duplicate-rows-in-sql-server –

1

Из того, что я понял, вы не хотите, чтобы вставить строки из «Producttemp», которые уже находятся в «Продукт».

Для этого вы можете использовать MERGE

MERGE Product AS P 
USING(SELECT DISTINCT Name,Descrip FROM Producttemp) AS PT 
ON P.Name = PT.Name AND P.Descrip=PT.Descrip 
WHEN NOT MATCHED THEN 
INSERT(Name,Descrip) VALUES(PT.Name,PT.Descrip); 
Смежные вопросы