Я хотел бы обновить 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
...
Это эффективно или логично?