tôi cần mã SQL để giải quyết vấn đề bảng kết hợp được mô tả trên dưới đây:Cần tập trung câu lệnh SQL trên sự kết hợp của bảng nhưng mục luôn luôn với ID duy nhất
Bảng cũ dữ liệu: bảng cũ
name version status lastupdate ID
A 0.1 on 6/8/2010 1
B 0.1 on 6/8/2010 2
C 0.1 on 6/8/2010 3
D 0.1 on 6/8/2010 4
E 0.1 on 6/8/2010 5
F 0.1 on 6/8/2010 6
G 0.1 on 6/8/2010 7
bảng dữ liệu mới: bảng mới
name version status lastupdate ID
A 0.1 on 6/18/2010
#B entry deleted
C 0.3 on 6/18/2010 #version_updated
C1 0.1 on 6/18/2010 #new_added
D 0.1 on 6/18/2010
E 0.1 off 6/18/2010 #status_updated
F 0.1 on 6/18/2010
G 0.1 on 6/18/2010
H 0.1 on 6/18/2010 #new_added
H1 0.1 on 6/18/2010 #new_added
sự khác biệt của dữ liệu mới và ngày cũ:
entry B xóa
phiên bản entry C cập nhật
tình trạng nhập E cập nhật
C1/H/H1 tiêu đề bổ sung
Những gì tôi muốn là luôn giữ cho ID mới - mối quan hệ tên ánh xạ trong cũ bảng dữ liệu bất kể dữ liệu đã thay đổi sau đó, hay còn gọi là tên luôn có một số ID duy nhất liên kết với nó.
Nếu mục nhập đã cập nhật, sau đó cập nhật dữ liệu, nếu mục nhập mới được thêm vào, hãy chèn vào bảng, sau đó cung cấp ID duy nhất được gán mới. Nếu mục nhập đã bị xóa, hãy xóa mục nhập và không sử dụng lại ID đó sau.
Tuy nhiên, tôi chỉ có thể sử dụng SQL với câu lệnh chọn hoặc cập nhật đơn giản, vì vậy tôi có thể quá khó để viết mã như vậy, tôi hy vọng ai đó có chuyên môn có thể cung cấp hướng, không có chi tiết cần thiết về biến thể SQL mã sql chuẩn như mẫu là đủ.
Cảm ơn trước!
RGS
KC
======== tôi niêm yết dự thảo sql của tôi ở đây, nhưng không chắc chắn nếu nó hoạt động, một số một với bình luận chuyên môn xin, cảm ơn!
1.duplicate bảng cũ như tmp cho cửa hàng cập nhật
tạo bảng tmp như select * from cũ
2.update vào tmp nơi "tên" là giống nhau trong bảng cũ và mới
cập nhật tmp nơi tên trong (chọn tên từ mới)
3.insert "tên" khác nhau (cũ vs mới) vào tmp và gán ID mới
01.chèn vào tmp (tên phiên bản status lastupdate ID) đặt idvar = max (chọn tối đa (id) từ tmp) + 1 chọn * từ (chọn new.name new.version new.status new.lastupdate new.ID từ cũ, mới nơi old.name <> new.name)
4. xóa các mục bị xóa khỏi bảng tmp (như B)
xóa từ tmp nơi (chọn ???)
Bạn không có ID trong bảng dữ liệu mới? – tzup
Đầu ra mẫu của bạn không phải là dấu hiệu của những gì bạn mong đợi cho mô tả của bạn. Có phải trường hợp bạn muốn ID vẫn duy trì tuần tự không? – Thomas
Ngoài ra, bạn đang sử dụng sản phẩm và phiên bản cơ sở dữ liệu nào? – Thomas