2010-03-22 5 views
2

У меня есть следующий запрос, чтобы перечислить сотрудников из двух таблиц.Запрос SQL Update для запроса select

Мне нужно обновить a.staffdiscountstartdate до '20100428', как переписать следующий запрос для этого?

select 
    a.employeeid, 
    b.employeeid 
from 
    tblEmployees a 
     left join 
    tblCards b 
     on 
      a.employeeid=b.employeeid 
where 
    GroupStartDate < '20100301' 
and 
    StaffDiscountStartDate > '20100428' 
and 
    datediff(day,groupstartdate,staffdiscountstartdate)>1 
and 
    b.employeeid is null 

ответ

2

Должно быть просто в состоянии сделать:

UPDATE a 
SET a.staffdiscountstartdate = '20100428' 
from tblEmployees a 
    left join tblCards b on a.employeeid=b.employeeid 
where GroupStartDate < '20100301' 
and StaffDiscountStartDate > '20100428' 
and datediff(day,groupstartdate,staffdiscountstartdate)>1 
and b.employeeid is null 

MS SQL только. Другие версии SQL не поддерживают этот синтаксис.

2

Два метода.

One:

update tblEmployees 
set staffdiscountstartdate = '20100428' 
where employeeid in (
    -- original select query here, remove b.employeeid from the select results 
) 

Два:

update a 
set a.staffdiscountstartdate = '20100428' 
from tblEmployees a 
    left join 
tblCards b 
    on 
     a.employeeid=b.employeeid 
where 
    GroupStartDate < '20100301' 
and 
    StaffDiscountStartDate > '20100428' 
and 
    datediff(day,groupstartdate,staffdiscountstartdate)>1 
and 
    b.employeeid is null 

Либо будет работать.

+0

+1 Часть первая тоже то же самое, что и мое решение (которое я сейчас удалю ... проклятье мои медленные пальцы ...) – amelvin

1
update 
    tblEmployees 
set 
    staffdiscountstartdate = '20100428' 
where 
    employeeid in (
    select 
     a.employeeid 
    from 
     tblEmployees a 
      left join 
     tblCards b 
      on 
       a.employeeid=b.employeeid 
    where 
     GroupStartDate < '20100301' 
    and 
     StaffDiscountStartDate > '20100428' 
    and 
     datediff(day,groupstartdate,staffdiscountstartdate)>1 
    and 
     b.employeeid is null 
    ) 
+0

+1 - Я удалю свой дублирующий ответ на этот вопрос. – amelvin

0
Update a 
Set staffdiscountstartdate = '20100428' 
--select a.employeeid, b.employeeid 
from 
    tblEmployees a 
     left join 
    tblCards b 
     on 
      a.employeeid=b.employeeid 
where 
    GroupStartDate < '20100301' 
and 
    StaffDiscountStartDate > '20100428' 
and 
    datediff(day,groupstartdate,staffdiscountstartdate)>1 
and 
    b.employeeid is null 
and 
    a. staffdiscountstartdate <> '20100428'  

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

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