2016-08-04 85 views
0

我有一个查询它更新表中的整个票。 我希望它仅更新其值需要更新的票据而不更新所有行。 例如 如果slabreachdays已经是10,那么新值也是10,它不应该更新。 这是我的更新查询。SQL更新只有值的值尚未更新

update ticket 
set TICKET.slabreachdays = 
FLOOR(((DAYS(TICKET.creationdate) - DAYS(current timestamp)+10) 
* 86400 + (MIDNIGHT_SECONDS(TICKET.creationdate) - 
MIDNIGHT_SECONDS(current timestamp)))/86400.0) 
where TICKET.VENDOR like 'ABC' 
and TICKET.STATUS NOT IN('CANCELLED','CLOSED') 

这是我的选择查询,它只选择需要更新的票据。这是我需要转换为一个更新查询查询

select * from (
    select ticketid,slabreachdays, 
    FLOOR(((DAYS(TICKET.creationdate) - DAYS(current timestamp)+10) * 86400 + (MIDNIGHT_SECONDS(TICKET.creationdate) - MIDNIGHT_SECONDS(current timestamp)))/86400.0) 
    as newValue 
    from ticket 
    where TICKET.MLOUTSOURCEVENDOR like 'ABC' and TICKET.STATUS NOT IN('CANCELLED','CLOSED')) 
where SLABREACHDAYS != newValue 

回答

0

试试吧

哪里..​​..和slabeachdays <>阿列尔计算表达式

0

试试这个

update ticket 
set TICKET.slabreachdays = 
FLOOR(((DAYS(TICKET.creationdate) - DAYS(current timestamp)+10) 
* 86400 + (MIDNIGHT_SECONDS(TICKET.creationdate) - 
MIDNIGHT_SECONDS(current timestamp)))/86400.0) 
where TICKET.VENDOR like 'ABC' 
and TICKET.STATUS NOT IN('CANCELLED','CLOSED') and 
TICKET.slabreachdays <> 
(FLOOR(((DAYS(TICKET.creationdate) - DAYS(current timestamp)+10) 
* 86400 + (MIDNIGHT_SECONDS(TICKET.creationdate) - 
MIDNIGHT_SECONDS(current timestamp)))/86400.0))