2013-10-16 87 views
0

比方說,我想更新表course_main。我最初的疑問是:如何根據選擇查詢的結果更新表格?

update course_main 
set data_src_pk1 = 2 
where course_id LIKE '%FA2013' and available_ind = 'N' 

那麼這將得到一些課程(只有一小套,幸運),我不想更新。所以我有一個select語句來檢索我想要更新的實際數據,並返回145行。

select course_id from course_main 
where course_id like '%FA2013' and available_ind = 'N' 
and course_id <> 'ENGL-0330-112WE-FA2013' 
and course_id <> 'ENGL-0360-112WE-FA2013' 
and course_id <> 'ENGL-0390-112WE-FA2013' 
and course_id <> 'ARTC-1053-128HY-CEQ113' 
and course_id <> 'ARTC-1353-128HY-FA2013' 
and course_id <> 'HITT-1005-005IN-CEQ113' 
and course_id <> 'HITT-1305-005IN-FA2013' 
and course_id <> 'HITT-1305-006IN-FA2013' 
and course_id <> 'READ-0300-104WE-FA2013' 
and course_id <> 'READ-0340-104WE-FA2013' 
and course_id <> 'READ-0370-104WE-FA2013' 
and course_id <> 'WBCT-1003-011IN-FA2013' 
and course_id <> 'WBCT-1005-011IN-CEQ113' 
and course_id <> 'WBCT-1003-010IN-FA2013' 
and course_id <> 'WBCT-1005-010IN-CEQ113' 
and course_id <> 'ARTS-1301-012IN-FA2013' 
order by course_id asc 

我想要使用更新語句來僅從第二個查詢命中145個結果。任何關於如何完成這一點的指針?

謝謝。

+0

請注意'LIKE'%...''不能使用索引。 – Strawberry

回答

2
update course_main 
set data_src_pk1 = 2 
where course_id in (select course_id from course_main 
where course_id like '%FA2013' and available_ind = 'N' 
and course_id <> 'ENGL-0330-112WE-FA2013' 
and course_id <> 'ENGL-0360-112WE-FA2013' 
and course_id <> 'ENGL-0390-112WE-FA2013' 
and course_id <> 'ARTC-1053-128HY-CEQ113' 
and course_id <> 'ARTC-1353-128HY-FA2013' 
and course_id <> 'HITT-1005-005IN-CEQ113' 
and course_id <> 'HITT-1305-005IN-FA2013' 
and course_id <> 'HITT-1305-006IN-FA2013' 
and course_id <> 'READ-0300-104WE-FA2013' 
and course_id <> 'READ-0340-104WE-FA2013' 
and course_id <> 'READ-0370-104WE-FA2013' 
and course_id <> 'WBCT-1003-011IN-FA2013' 
and course_id <> 'WBCT-1005-011IN-CEQ113' 
and course_id <> 'WBCT-1003-010IN-FA2013' 
and course_id <> 'WBCT-1005-010IN-CEQ113' 
and course_id <> 'ARTS-1301-012IN-FA2013') 

+1

這有助於,謝謝。我知道我是「過度複雜」,但這正是我所尋找的,「WHERE IN」條款的一個例子。 –

+0

你不需要子選擇。這也很複雜。它可以進一步簡化,如[我的答案](http://stackoverflow.com/a/19405358/1243123) – Litmus

+0

中所示,我認爲他正在尋找一種方法來通過select中的鍵來更新行。我進一步認爲他的更新只是作爲他的問題的一個例子。 – GBoehm

1

我覺得你太過於複雜了。

update course_main 
set data_src_pk1 = 2 
where course_id like '%FA2013' and available_ind = 'N' 
and course_id <> 'ENGL-0330-112WE-FA2013' 
and course_id <> 'ENGL-0360-112WE-FA2013' 
and course_id <> 'ENGL-0390-112WE-FA2013' 
and course_id <> 'ARTC-1053-128HY-CEQ113' 
and course_id <> 'ARTC-1353-128HY-FA2013' 
and course_id <> 'HITT-1005-005IN-CEQ113' 
and course_id <> 'HITT-1305-005IN-FA2013' 
and course_id <> 'HITT-1305-006IN-FA2013' 
and course_id <> 'READ-0300-104WE-FA2013' 
and course_id <> 'READ-0340-104WE-FA2013' 
and course_id <> 'READ-0370-104WE-FA2013' 
and course_id <> 'WBCT-1003-011IN-FA2013' 
and course_id <> 'WBCT-1005-011IN-CEQ113' 
and course_id <> 'WBCT-1003-010IN-FA2013' 
and course_id <> 'WBCT-1005-010IN-CEQ113' 
and course_id <> 'ARTS-1301-012IN-FA2013' 
3

如何

UPDATE course_main 
SET data_src_pk1 = 2 
WHERE course_id LIKE '%FA2013' 
    AND available_ind = 'N' 
    AND course_id NOT IN ('ENGL-0330-112WE-FA2013','ENGL-0360-112WE-FA2013',.....) 
ORDER BY course_id ASC; 

+0

這有助於,謝謝。我知道我是「過度複雜」,但這正是我所尋找的,「WHERE IN」條款的一個例子。 –