01/10/2018, 16:41
Hỏi về lệnh MySql
có cách nào để xóa cái cùng id product mà số lượng (amount ) nhỏ hơn ko ạ.
Bài liên quan
có cách nào để xóa cái cùng id product mà số lượng (amount ) nhỏ hơn ko ạ.
Thử dùng câu sql này.
ths ạ . . …
cái này nếu product đó chỉ có 1 record thì nó cũng xoá luôn.
Đồng ý với bạn,
cần phải có 1 câu sql để kiểm tra xem procut_id có số dòng lớn hơn hoặc bằng 2 thì mới tiến hành hình xóa.
do câu hỏi chỉ nói xóa thôi nên chỉ cho câu sql để xóa.
cái này cần có thêm nghiệp vụ vào(business logic) thì mới biết cách xử lý trước đó như thế nào.
Thử xem nhé:
1. Đầu tiên tìm những dòng bị dulicate product_id
2. Giờ tìm những dòng bị duplidate, mà có AMOUNT nhỏ hơn Max_AMOUNT.
3. Sau khi có những dòng cần tìm, giờ gán nó vào câu DELETE
=> Lưu ý là với cách làm trên, những rows cùng product_id, và cùng max_amount vẫn ko bị xóa !
cái 2 dùng subquery có vẻ chậm đó bạn
Ko phải cứ subquery là chậm, đó là quan niệm sai lầm của người mới học sql (thấy viết câu sql dài => chậm).
Bản chất khi query từ VIEW đã là subquery, hay như (2) có thể xem là in-line view.
Muốn biết chậm hay ko ngoài việc đánh giá chủ quan quá trình xử lý của câu lệnh trong từng trường hợp (vd: join trước, hay filter trước là có lợi hơn?), ngoài ra con phải xem execution plan để biết câu lệnh sẽ được chạy như thế nào, indexes nào được dùng, indexes nào bị missed,…
Riêng với câu correlated subquery thì phải cẩn thận hơn, mặc dù một số csdl lớn như Oracle có khả năng rewrite lại bad/stupid sql.
Thanks bạn mod nào đã giúp format lại bài post trên.