14 lượt xem
Ẩn danh
Ngày 23 Tháng 05
Chào mọi người, em có câu hỏi về Oracle DB, ai biết giải đáp giúp em với. Em định làm trong table TEMP01 thì chỉ có dữ liệu của TEMP02 không trùng lặp được lưu thôi. Vậy em muốn hỏi nếu thông tin liên lạc (CONTACT) ở TEMP02 trùng với data thông tin liên lạc ở TEMP01 thì làm thế nào để trừ data đó ra rồi lưu dữ liệu ạ? Ở dưới là lệnh SQL em đã viết ạ: INSERT INTO TEMP01 (CONTACT) SELECT A.CONTACT FROM TEMP02 A WHERE A.CAL_CD = '2' AND A.VISIT_DATE = '20230522' AND CONTACT IS NOT NULL GROUP BY A.TEMP003;
Đánh giá câu hỏi ngay!
Hãy ấn ↑Up Vote với những câu hỏi cụ thể và chi tiết
Hãy ấn ↓Down Vote với những câu hỏi chưa rõ ràng Careerly sẽ nhắc người hỏi chỉnh sửa lại.
1 câu trả lời
BEST
Chào bạn, Để loại trừ các dòng dữ liệu trong TEMP02 có CONTACT trùng lặp với dữ liệu trong TEMP01, bạn có thể sử dụng mệnh đề NOT EXISTS hoặc LEFT JOIN với điều kiện NULL để loại bỏ các dòng dữ liệu trùng lặp. Dưới đây là một ví dụ sử dụng mệnh đề NOT EXISTS: ``` INSERT INTO TEMP01 (CONTACT) SELECT A.CONTACT FROM TEMP02 A WHERE A.CAL_CD = '2' AND A.VISIT_DATE = '20230522' AND A.CONTACT IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM TEMP01 B WHERE B.CONTACT = A.CONTACT ); ``` Trong ví dụ này, subquery SELECT 1 FROM TEMP01 B WHERE B.CONTACT = A.CONTACT kiểm tra xem có bất kỳ dòng nào trong TEMP01 có CONTACT giống với dòng hiện tại trong TEMP02. Nếu không có dòng nào tồn tại, dòng đó sẽ được chèn vào TEMP01. Lưu ý rằng query trên giả định rằng cột CONTACT trong TEMP01 không được đặt là khóa chính hoặc là một unique field. Nếu CONTACT là khóa chính hoặc có unique constraint, việc chèn các giá trị trùng lặp sẽ gây ra lỗi. Cách LEFT JOIN: ``` INSERT INTO TEMP01 (CONTACT) SELECT A.CONTACT FROM TEMP02 A LEFT JOIN TEMP01 B ON A.CONTACT = B.CONTACT WHERE A.CAL_CD = '2' AND A.VISIT_DATE = '20230522' AND A.CONTACT IS NOT NULL AND B.CONTACT IS NULL; ``` Lưu ý: Với các câu hỏi tương tự bạn nên cung cấp fiddle online (từ khoá sql fiddle) để người khác có thể dễ dàng reproduce lại vấn đề nhé
1INSERT INTO TEMP01 (CONTACT)
2SELECT A.CONTACT
3FROM TEMP02 A
4WHERE A.CAL_CD = '2' AND A.VISIT_DATE = '20230522' AND A.CONTACT IS NOT NULL
5AND NOT EXISTS (
6 SELECT 1
7 FROM TEMP01 B
8 WHERE B.CONTACT = A.CONTACT
9);
10
11-- LEFT JOIN
12INSERT INTO TEMP01 (CONTACT)
13SELECT A.CONTACT
14FROM TEMP02 A
15LEFT JOIN TEMP01 B ON A.CONTACT = B.CONTACT
16WHERE A.CAL_CD = '2' AND A.VISIT_DATE = '20230522' AND A.CONTACT IS NOT NULL
17AND B.CONTACT IS NULL;
Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!
Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.
Bạn đã có tài khoản rồi?
Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!
Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.