2016-11-17 4 views
0

У меня есть этот запрос, который проверяет, существует ли какой-либо идентификатор в таблице, он изменяет значение другого столбца.SQL Update и существует

IF EXISTS (SELECT A.id,description,ab FROM tbl_C C 
    JOIN tbl_B B ON ba=C.id 
    JOIN tbl_A A ON A.id=B.value 
    WHERE a=3) 
    BEGIN UPDATE tbl_A 
    SET ab=1 
    where ab=0 
    END 
    ELSE 
    PRINT N'No values' 

Что здесь происходит, что он изменяет все значения, а не только те, в IF EXISTS состояния. Как я могу обновить только те, которые были выбраны в условии IF EXISTS?

+0

Использование объединений в запросе UPDATE –

+0

@PareshJ ПРИСОЕДИНЯЕТСЯ между чем? столбец isServiceManual не имеет ничего общего с таблицей Async, это из таблицы Up. Или, может быть, я не понимаю, что вы пытаетесь сказать. –

+0

@PareshJ да, спасибо! –

ответ

0

Использование предложения JOIN в инструкции UPDATE позволяет очень легко обновлять данные в одной таблице из другой таблицы. Проверьте этот запрос и надейтесь, что он вам поможет.

IF EXISTS (SELECT A.id, descr, ab FROM tbl_C C 
     JOIN BAsyncP ON a=C.id 
     JOIN tbl_A Up ON A.id=B.value 
     WHERE type=3) 
    BEGIN 
     UPDATE Up 
     SET A.ab=1 
     FROM tbl_C C 
      JOIN tbl_C ON ab=C.id 
      JOIN tbl_A Up ON A.id=B.value 
     WHERE type=3 AND A.ab=0 
    END 
ELSE 
    PRINT N'No values' 
0
IF EXISTS (SELECT Up.id,descr,isServiceManual FROM tbl_odw_asyncmessage Async 
JOIN tbl_ODW_AsyncMessageParam AsyncP ON asyncMessageId=Async.id 
JOIN tbl_ODW_UnloadingPoint Up ON up.id=AsyncP.value 
WHERE type=3) 
BEGIN UPDATE tbl_ODW_UnloadingPoint 
SET isServiceManual=1 
where isServiceManual=0 AND Up.id = Up.id 
END 
ELSE 
PRINT N'No values' 

может быть, это поможет ??

0

попробовать это

IF EXISTS (SELECT A.id,descr,ab FROM tbl_C C 
    JOIN tbl_B B ON ba=C.id 
    JOIN tbl_A A ON up.id=B.value 
    WHERE type=3) 

BEGIN UPDATE up 
    SET A.ab=1 
    FROM tbl_C C 
    JOIN tbl_B BON ba=Async.id 
    JOIN tbl_A A ON up.id=B.value 
    WHERE type=3 
    and 
    A.ab=0 

END 
ELSE 
PRINT N'No values' 
0

Пусть пытаются ниже код.

IF EXISTS (SELECT Up.id,descr,isServiceManual FROM tbl_odw_asyncmessage Async 
    JOIN tbl_ODW_AsyncMessageParam AsyncP ON asyncMessageId=Async.id 
    JOIN tbl_ODW_UnloadingPoint Up ON up.id=AsyncP.value 
    WHERE type=3) 
    Begin 
     Update tbl_ODW_UnloadingPoint set isServiceManual=1 
     where isServiceManual=0 
     and 
     exists (
     SELECT Up.id FROM tbl_odw_asyncmessage Async 
     JOIN tbl_ODW_AsyncMessageParam AsyncP ON asyncMessageId=Async.id 
     where tbl_ODW_UnloadingPoint.id = AsyncP.value 
     and type=3 
     ) 
    End 
ELSE 
    PRINT N'No values' 
Смежные вопросы