2012-12-12 43 views
7

Sau đây là fiddle SQL của tôi: http://sqlfiddle.com/#!2/f9bae/1Cập nhật không được cập nhật toàn bộ chuỗi

Trong đó tôi đang cố gắng để kiểm tra xem toàn bộ tên đã được xác nhận qua bảng tra cứu hay không và nếu có bất kỳ lỗi sau đó nó nên được thay thế bằng giá trị chính xác nhưng vấn đề tôi đang gặp phải là nếu tên có chứa nhiều giá trị sai thì truy vấn chỉ cập nhật một phần của tên đó và để phần còn lại không đổi, vui lòng cho tôi biết làm cách nào tôi có thể sửa đổi truy vấn của mình để cập nhật do đó, nó sẽ cập nhật toàn bộ tên theo bảng tra cứu giá trị chính xác.

Cảm ơn,

Trả lời

2

Đây là một SQLFIddle demo

truy vấn xấu xí này làm việc cho tối đa 4 thay thế trong một chuỗi. Nếu bạn cần nhiều thay thế, cách tốt nhất là tạo một hàm do người dùng định nghĩa để thay thế các từ này trong một chuỗi và sử dụng nó để cập nhật.

UPDATE table1 a 
    LEFT JOIN lookup b1 on a.username LIKE CONCAT('%', b1.`WRONG`, '%') 
    LEFT JOIN lookup b2 on a.username LIKE CONCAT('%', b2.`WRONG`, '%') 
      and (b2.Wrong not in (b1.Wrong)) 
    LEFT JOIN lookup b3 on a.username LIKE CONCAT('%', b3.`WRONG`, '%') 
      and (b3.Wrong not in (b1.Wrong,b2.Wrong)) 
    LEFT JOIN lookup b4 on a.username LIKE CONCAT('%', b4.`WRONG`, '%') 
      and (b4.Wrong not in (b1.Wrong,b2.Wrong,b3.Wrong)) 

SET a.username = 
REPLACE(
    REPLACE(
     REPLACE(
      REPLACE(a.username, IFNULL(b1.`WRONG`,''), IFNULL(b1.`RIGHT`,'')) 
     , IFNULL(b2.`WRONG`,''), IFNULL(b2.`RIGHT`,'')) 
    , IFNULL(b3.`WRONG`,''), IFNULL(b3.`RIGHT`,'')) 
    , IFNULL(b4.`WRONG`,''), IFNULL(b4.`RIGHT`,'')) 
+0

cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn! :) –

0

Với thiết lập của bạn, việc cập nhật tối đa 3 lần sẽ xử lý lặp lại dễ dàng hơn. Trên một mặt lưu ý Chaudhary hoặc Choudhary có lẽ đúng hơn so với chodry :)

http://sqlfiddle.com/#!2/2d4c6/1

EDIT: Hoặc bạn có thể thoát khỏi các bảng tra cứu nếu bạn không có quá nhiều mục có như thế này: -

http://sqlfiddle.com/#!2/890ea/1

+0

không nên thực hiện bởi một truy vấn của tôi khiến một số tên chứa bốn kết hợp và một số tên năm. Vì vậy, nếu tôi sẽ đi cho nó nó sẽ là kịch bản trường hợp xấu nhất ....: -] –

+0

Nếu bạn không có quá nhiều chỉnh sửa, bạn có thể thử đặt chúng trong một thay thế duy nhất. – Himanshu

Các vấn đề liên quan