Я проверяю следующий подход SQL от сообщества, где я полностью обновляю роли пользователя.(Полное обновление таблицы соединений)
Пользователь
+----+-------+------+
| id | first | last |
+----+-------+------+
| 1 | John | Doe |
| 2 | Jane | Doe |
+----+-------+------+
Роль
+----+----------+
| id | name |
+----+----------+
| 1 | admin |
| 2 | accounts |
| 3 | sales |
+----+----------+
UserRole
+--------+--------+
| userid | roleid |
+--------+--------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 2 |
| 2 | 3 |
+--------+--------+
Мой подход SQL -> сначала удалить все, второй вставить все записи
DELETE FROM UserRole WHERE userid = 1;
INSERT INTO UserRole(userid, roleid) VALUES(1, 2), (1, 3);
Есть ли лучший способ?Я имею в виду сделать это в одном запросе, возможно, для такого рода таблиц связывания / объединения?
Edit
Я думаю, что я должен был сказать, чтобы найти эффективный SQLоперация вместо одного запроса.
Вот еще один SQL
DELETE FROM UserRole WHERE user_id = 1 AND role_id NOT IN (2, 3);
INSERT INTO UserRole(user_id, role_id) VALUES(1, 2), (1, 3)
ON DUPLICATE KEY UPDATE user_id = VALUES(user_id), role_id = VALUES(role_id);