Thứ Năm, 4 tháng 12, 2008

Sử dụng FROM trong cú pháp UPDATE với MySQL

Khi sử dụng các câu truy vấn lồng nhau trong MySQL đôi khi bạn sẽ gặp một số vấn đề nhỏ bởi một số cấu trúc truy vấn của MySQL không theo chuẩn SQL chung. Có thể nêu ở đây một ví dụ nhỏ thường gặp đó là: Update.
Lần đầu tiên gặp phải vấn đề này là khi sửa lại password trong bảng dữ liệu jbp_user của Jbossportal.

mysql> update jbp_users set jbp_password = (select jbp_password from jbp_users where jbp_uname='user') where jbp_uname='test';
ERROR 1093 (HY000): You can't specify target table 'jbp_users' for update in FROM clause

Để thực hiện được câu truy vấn thì có thể làm như sau:
mysql> update jbp_users set jbp_password = (select jbp_password from ( select * from jbp_users) as b where jbp_uname='user') where jbp_uname='test';

Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Không có nhận xét nào: