Chừng nào bạn có chỉ số phù hợp ở nơi này nên làm việc ổn:
UPDATE table_a
SET
column_a_1 = (SELECT table_b.column_b_1
FROM table_b
WHERE table_b.user_name = table_a.user_name)
, column_a_2 = (SELECT table_b.column_b_2
FROM table_b
WHERE table_b.user_name = table_a.user_name)
WHERE
EXISTS (
SELECT *
FROM table_b
WHERE table_b.user_name = table_a.user_name
)
UPDATE trong sqlite3 không hỗ trợ một mệnh đề FROM, mà làm này làm việc nhiều hơn một chút so với trong RDBMS khác.
Nếu hiệu suất không thỏa đáng, một tùy chọn khác có thể là tạo các hàng mới cho table_a bằng cách chọn và tham gia với table_a vào bảng tạm thời. Sau đó xóa dữ liệu từ table_a và repopulate từ tạm thời.
Nguồn
2010-10-02 13:31:09
tôi đã loại trừ phần table_a từ ha còn lại bên thứ hai của đối số đã đặt, để làm việc này. Sử dụng câu trả lời ở trên, có vẻ như 'column_a_1 = (SELECT table_b.column_b_1 FROM table_b WHERE table_b.user_name = table_a.user_name)' –
Câu trả lời này giúp hiểu chi tiết hơn cách sao chép cho câu trả lời được đăng tại http://stackoverflow.com/question/17267417/how-to-upsert-merge-insert-on-duplicate-update-in-postgresql/17267423 # 17267423 – zerocog
Số lần tham gia được thực hiện ở đây? chỉ 3 lần, hoặc thay vì 3 lần mỗi hàng trong table_a? (SQL của tôi là gỉ) –