1. 程式人生 > >子查詢在UPDATE 語句中的應用

子查詢在UPDATE 語句中的應用

在UPDATE語句中可以在更新列表中以及WHERE語句使用子查詢。下面演示一個將圖書的出版日期全部更新為所有圖書中的最新出版日期,SQL語句如下:


UPDATE T_Book SET FYearPublished=(SELECT MAX(FYearPublished) FROM T_Book) 

注意,在MYSQL 中是不支援使用子查詢來更新一個列的,所以這個UPDATE 語句無法在MYSQL中執行。

執行完畢檢視T_Book表中的內容:


FID FNAME FYEARPUBLISHED FCATEGORYID

1 About J2EE 2008 4

2 Learning Hibernate 2008 4

3 Two Cites 2008 1

4 Jane Eyre 2008 1

5 Oliver Twist 2008 1

6 History of China 2008 2

7 History of England 2008 2

8 History of America 2008 2

9 History of TheWorld 2008 2

10 Atom 2008 3

11 RELATIVITY 2008 3

12 Computer 2008 3

13 Astronomy 2008 3

14 How To Singing 2008 5

15 DaoDeJing 2008 6

16 Obedience toAuthority 2008 6

如果UPDATE語句擁有WHERE子句,那麼還可以在WHERE子句中使用子查詢,其使用方式與SELECT語句中的子查詢基本相同,而且也可以使用相關子查詢等高階的特性。

下面的SQL語句用來將所有同類書本書超過3 本的圖書的出版日期更新為2005:


UPDATE T_Book b1 SET b1.FYearPublished=2005

WHERE ( SELECT COUNT(*) FROM T_Book b2 WHERE b1. FCategoryId=b2. FCategoryId )>3 

上面的SQL 語句使用相關子查詢來查詢所有與待更新的書籍屬於同類別的書籍的總數,如果總數大於3則將當前書籍的出版日期更新為2005。

執行完畢檢視T_Book表中的內容:


FID FNAME FYEARPUBLISHED FCATEGORYID

1 About J2EE 2008 4

2 Learning Hibernate 2008 4

3 Two Cites 2008 1

4 Jane Eyre 2008 1

5 Oliver Twist 2008 1

6 History of China 2005 2

7 History of England 2005 2

8 History of America 2005 2

9 History of TheWorld 2005 2

10 Atom 2005 3

11 RELATIVITY 2005 3

12 Computer 2005 3

13 Astronomy 2005 3

14 How To Singing 2008 5

15 DaoDeJing 2008 6

16 Obedience toAuthority 2008 6