2016-12-06 89 views
0

我是SQL新手。使用SET语句查询的Oracle SQL

我想开发代码来运行一个简单的查询来更新一个表中的列值,根据选择标准和在另一个表上查找。

的要求是:

If CODE TABLE SERIAL NUMBER = SERIAL NO list table and CODE TABLE check Code = 999 and CODE TABLE Taken up indicator = 'Y' 
THEN in CODE table 
Update 
check code = 0 
Taken up indicator = SPACES 

SERIAL NO LIST table only holds SERIAL NO 
CODE table holds SERIAL NO; CHECK CODE ; Taken up indicator 
SOME SERIAL NO S IN CODE TABLE HAVE CHECK CODE = 999 AND Taken up indicator = Y 
These need to be amended to 0 and SPACE if the SERIAL NOs MATCH 

SQL是:

UPDATE 
    SET CODE.CHECK_CODE = '0', CODE.TKUP_FLAG = ' ' 
WHERE CODE.SERIAL_NO = SERIAL_NO_LIST.SERIAL_NO 
AND CODE.CHECK_CODE = '999' 
AND CODE.TKUP_FLAG = 'Y' 

我已经试过这其中包括内部连接许多变化。 任何建议是最感谢。

回答

0

你似乎想是这样的:

update code 
    set CHECK_CODE = 0, 
     TKUP_FLAG = ' ' 
    where exists (select 1 
        from SERIAL_NO_LIST 
        where CODE.SERIAL_NO = SERIAL_NO_LIST.SERIAL_NO 
       ) and 
      code.CHECK_CODE = '999' and 
      code.TKUP_FLAG = 'Y'; 

也就是说,不要在where子句中筛选获得您想要更新的行。

0

你的问题不是很清楚,但据我了解我propse如下:

update CODE 
set CHECK_CODE = '0', TKUP_FLAG = ' ' 
where CODE.CHECK_CODE = '999' 
     AND CODE.TKUP_FLAG = 'Y' 
     AND CODE.SERIAL_NO IN (SELECT SERIAL_NO_LIST.SERIAL_NO FROM SERIAL_NO_LIST) 

其他的解决办法:

update CODE 
set CHECK_CODE = '0', TKUP_FLAG = ' ' 
where CODE.CHECK_CODE = '999' 
     AND CODE.TKUP_FLAG = 'Y' 
     AND EXISTS (SELECT SERIAL_NO_LIST.SERIAL_NO FROM SERIAL_NO_LIST WHERE SERIAL_NO_LIST.SERIAL_NO = CODE.SERIAL_NO) 

您还可以根据需要添加条件的子查询。

+0

谢谢你的回复。为我工作 –