2016-12-06 90 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

謝謝你的回覆。爲我工作 –