ahmed_sa Ответов: 1

Как написать запрос insert related parts for maskid в chemical master table, если он не существует ?


How to write query Insert related parts for maskId into chemical master table if not exist on table chemical Master ? 


create table #temp
(
partid     int,
maskid     int,
chemicalid int,
status  nvarchar(50)
)
insert into #temp
values
(100,1000,901)
(700,1700,909)
(400,1500,920)
Parts   
pk       
PartId    maskId
100       1000
200       1000
300       1000
400       1500
500       1700
600       1700
700       1700

Chemical Master Table
   PK                          fk
Chemicalmasterid  ChemicalId  PartId
  1                901         100
  4                920         400
  7                909         700


Как написать Select для возврата деталей, связанных с maskId на временную таблицу #Temp из табличных частей
затем вставьте в таблицу checmicalmaster связанные части для maskId на temp table #temp в случае отсутствия на таблице chemical master

как объяснить

маскид 1000 имеет 100 и 200 и 300

тогда я проверю на столе химический мастер чтобы сопутствующие детали для маскида не добавлялись

Я обнаружил, что 200 и 300 относятся к Маскиду и не существуют на столе chemicalMaster

затем добавьте их в таблицу chemicalmaster с chemicalId до последнего значения для маски на таблице

ChemicalMatser

Что я уже пробовал:

values must be inserted into chemical master table will be :
FinalResult 
8   901 200  
9   901 300 
10  909 500
11  909 600

ZurdoDev

Если не существует (выберите что-нибудь ...)
НАЧАТЬ
-- сделать нечто
КОНЕЦ

1 Ответов

Рейтинг:
8

Richard Deeming

Учитывая эту установку:

DECLARE @Parts TABLE
(
    PartId int NOT NULL,
    MaskId int NOT NULL
);

INSERT INTO @Parts (PartId, MaskId)
VALUES
    (100, 1000),
    (200, 1000),
    (300, 1000),
    (400, 1500),
    (500, 1700),
    (600, 1700),
    (700, 1700)
;

DECLARE @ChemicalMaster TABLE 
(
    ID int NOT NULL IDENTITY(1, 1), 
    ChemicalId int NOT NULL, 
    PartId int NOT NULL
);

INSERT INTO @ChemicalMaster (ChemicalId, PartId)
VALUES
    (901, 100),
    (920, 400),
    (909, 700)
;

DECLARE @NewData TABLE
(
    PartId int NOT NULL,
    MaskId int NOT NULL,
    ChemicalId int NOT NULL
);

INSERT INTO @NewData (PartId, MaskId, ChemicalId)
VALUES
    (100, 1000, 901),
    (700, 1700, 909),
    (400, 1500, 920)
;
затем следующий запрос дает ожидаемые результаты:
SELECT
    N.ChemicalId,
    P.PartId
FROM
    @NewData As N
    INNER JOIN @Parts As P
    ON P.MaskId = N.MaskId
WHERE
    Not Exists
    (
        SELECT 1
        FROM @ChemicalMaster As M
        WHERE M.ChemicalId = N.ChemicalId
        And M.PartId = P.PartId
    )
;
Выход:
ChemicalId | PartId
-------------------
901        | 200
901        | 300
909        | 500
909        | 600
Палка Ан INSERT INTO @ChemicalMaster (ChemicalId, PartId) перед запросом будут вставлены и новые строки.