Nếu bạn biết không bao giờ có bản sao trong mảng, bạn có thể sử dụng JSON_SEARCH
để tìm đường dẫn đến giá trị bạn muốn xóa, sau đó sử dụng JSON_REMOVE
Để loại bỏ nó. Lưu ý rằng bạn cần kiểm tra JSON_SEARCH
thực sự tìm thấy một giá trị, nếu không thì JSON_REMOVE
sẽ vô hiệu hóa toàn bộ trường:
UPDATE waitinglist
SET new = JSON_REMOVE(new, JSON_UNQUOTE(JSON_SEARCH(new, 'one', 'orange')))
WHERE JSON_SEARCH(new, 'one', 'orange') IS NOT NULL
Tôi đã tạo một bản nhỏ bản trình diễn trên dbfiddle .
Lưu ý rằng bạn phải sử dụng JSON_UNQUOTE
về phản hồi từ JSON_SEARCH
để biến nó thành một đường dẫn hợp lệ cho JSON_REMOVE
.