Удаление и добавление строк с помощью объединений в mySQL - PullRequest
1 голос
/ 20 марта 2020

Я хотел бы обновить 2 таблицы, которые связаны между собой соединением 1 ко многим.

Я использую R для подключения к базе данных для предварительной обработки перед запуском соответствующих функций SQL. У меня вопрос: SQL функции, которые я планирую использовать, хороший метод, или есть лучший способ для размещения данных такого типа.

Пример

DataFrame in R

ID      GroupID   Group_Name       Scores
1       1         "Ride High"      "100,90,85"
2       2         "Flaming Idiots" "90,50,78"

R код для создания таблиц (я использую Tidyverse)

GroupDF <- tibble(GroupID = DataFrame$GroupID,Group_Name=DataFrame$Group_Name)
ScoreDF <- tibble(GroupID = DataFrame$GroupID,Scores=DataFrame$Scores)
ScoreDF <- separate_rows(ScoreDF,Scores,sep = ',',convert = TRUE)

dbWriteTable(Con,'Group_Update',GroupDF)
dbWriteTable(Con,'Score_Update',ScoreDF)

SQL код (Имеет ли это смысл)

UPDATE Group_Table Gr 
       INNER JOIN Group_Update UG on Gr.GroupID = UG.GroupID
              set Gr.Group_Name = UW.Group_Name;

DELETE Sc FROM Score_Table Sc
    RIGHT JOIN Score_Update SU ON sc.GroupID = SU.GroupID;

INSERT INTO Score (GroupID,Scores)
SELECT 
   GroupID, Scores
FROM 
   Score_Update;

Как я объяснил проблему, соединение 1-к-1 может быть прямым обновлением с использованием объединений, но столбцу 1-ко-многим сначала нужно было удалить существующие данные из базы данных, прежде чем новые данные могут быть добавлены.

Конечный результат

Group Table
ID      GroupID   Group_Name                 ID      GroupID   Group_Name
1       1         "Low Rider"                1       1         "Ride High"
2       2         "Hot Flames"       ->      2       2         "Flaming Idiots"
3       3         "Happy Roads"              3       3         "Happy Roads"
4       4         "Runners"                  4       4         "Runners"

Score Table
ID    GroupID    Scores                      ID    GroupID    Scores
#     1          100                         #     1          100
#     1          90                          #     1          90
#     2          0                           #     1          85
#     3          70                          #     2          90
#     3          70                          #     2          50
#     3          70                          #     2          78
...                                          #     3          70
                                             #     3          70
                                             #     3          70
                                             ...

Это эффективно или логично?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...