Oracle SQL使用SET语句查找

时间:2016-12-06 14:30:11

标签: sql 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'

我尝试过很多变种,包括内连接。 任何建议都非常感谢。

2 个答案:

答案 0 :(得分: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子句中进行过滤以获取要更新的行。

答案 1 :(得分:0)

你的问题不是很清楚,但根据我的理解,我提出以下建议:

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 )

如果需要,您还可以为子查询添加条件。