Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cập nhật một cột trong bảng bằng cách sử dụng các giá trị duy nhất được chọn ngẫu nhiên từ một bảng khác

Bạn có thể thực hiện việc này bằng cách tạo một trình kích hoạt để chèn vào table1. Sau đó, bạn chọn tất cả AddressId từ table2 chưa được đặt trong table1, sắp xếp chúng ngẫu nhiên và chỉ chọn cái đầu tiên.

CREATE TRIGGER TRIGGER1 
BEFORE INSERT ON TABLE1 
FOR EACH ROW /* Trigger for each new row inserted into table1 */
BEGIN
SELECT addressId INTO :new.ADDRESSID /* Set AddressId for new row in table1 */ FROM 
(
   SELECT table2.addressId FROM table2
   LEFT JOIN table1 ON table1.CompanyNumber = table2.company AND table1.AddressID = table2.addressId
   WHERE table1.AddressID IS NULL /* Not already in table1 */ AND table2.Company = :new.COMPANYNUMBER /* Select all addressIds matching the company number */
   ORDER BY dbms_random.value /* order them randomly */
 ) hits
 WHERE ROWNUM = 1; /*Only pick the first randomly ordered one*/
    
EXCEPTION
  WHEN no_data_found THEN /* CompanyNumber not in table2 or no unique AddressId left */
     :new.ADDRESSID := NULL;
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao chỉ mục không được sử dụng cho truy vấn này?

  2. Oracle thiếu kiểu dữ liệu Bit cho các cột bảng

  3. Làm thế nào để sử dụng phân biệt và tổng hợp cả hai cùng nhau trong oracle?

  4. Ngăn chặn sqlplus cắt ngắn tên cột, không có định dạng cột riêng lẻ

  5. Chuyển đổi từ ngày sang kỷ nguyên-Oracle