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

R và MySQL - kiểm tra xem một hàng có tồn tại trong một bảng hay không trước khi ghi vào nó bằng cách sử dụng dbWriteTable ()

Hãy xem xét một trong hai cách:giải pháp de-dupe theo hướng SQL hoặc giải pháp de-dupe theo hướng R. Đối với trước đây, bạn sẽ cần sử dụng bảng dàn dựng tạm thời chạy cổ điển LEFT JOIN...IS NULL/NOT EXISTS/NOT IN Truy vấn SQL. Đối với sau này, bạn sẽ nhập tất cả nội dung trong khung dữ liệu, nối df hiện tại của bạn và chạy unique() của R . Tuy nhiên, có vẻ như bạn không có ý định sau nhưng tôi sẽ giới thiệu cho những độc giả trong tương lai.

SQL (sử dụng bảng tạm thời với cấu trúc chính xác của bảng đích)

# OVERWRITE TEMP EACH TIME
dbWriteTable(con_hub, value = my_R_dataframe, 
                      name = "table2_temp", 
                      overwrite = TRUE,                        
                      row.names = FALSE)

# RUN LEFT JOIN...IS NULL QUERY (COMPARE COLS --COL1, COL2, COL3-- ADD/REMOVE AS NEEDED)
dbSendQuery(con_hub, paste0("INSERT INTO table2", 
                            " SELECT * FROM table2_temp",
                            " LEFT JOIN table2",
                            "   ON table2_temp.col1 = table2.col1", 
                            "   AND table2_temp.col2 = table2.col2",
                            "   AND table2_temp.col3 = table2.col3",
                            " WHERE table2.col1 IS NULL",
                            "   OR table2.col2 IS NULL",
                            "   OR table2.col3 IS NULL"))

R (đọc trong dữ liệu table2, cân nhắc nếu không quá đánh thuế vào tài nguyên, ưu tiên nếu loại bỏ phần mềm của tất cả các cột)

# RETRIEVE table2 DATA
table2df <- dbGetQuery(con_hub, "SELECT * FROM table2")

# APPEND BOTH DATAFRAMES
stackeddf <- rbind(table2df, my_R_dataframe)

# RETURN UNIQUE ROWS
finaldf <- unique(stackeddf)

# OVERWRITE DESTINATION TABLE EACH TIME
dbWriteTable(con_hub, value = finaldf, 
                      name = "table2", 
                      overwrite = TRUE,                         
                      row.names = FALSE)

# CLEAN UP ENVIRON OF UNNEEDED OBJECTS
rm(table2df, stackeddf, finaldf)
gc()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Liên tục phát trực tuyến âm thanh ngẫu nhiên từ cơ sở dữ liệu

  2. Bảo mật cơ sở dữ liệu 101:Bảo mật trong cơ sở dữ liệu nguồn mở

  3. MySQL - Sử dụng COUNT (*) trong mệnh đề WHERE

  4. Hiệu suất Nhiều lần chèn hoặc nhiều giá trị chèn một lần

  5. Entity Framework có ràng buộc với SQL Server không?