2013-10-16 58 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”条款的一个例子。 –