Хорошо, может быть, это сложный вопрос, но я знаю, что это может случиться с некоторыми из нас.Я постараюсь сделать его как можно короче.
У меня есть 4 таблицы, 1 родительская таблица и 3 дочерние таблицы.(для этого примера они имеют одинаковые столбцы, в моем реальном случае это не так).Вот так.
(все столбцы в 4 таблицах являются целыми числами)
PARENT
ID POSITION
1 1
2 1
3 1
4 1
CHILD1
IDPARENT, POSITION
1 2
1 3
1 4
1 6
2 3
2 4
3 2
3 5
CHILD2
IDPARENT, POSITION
1 5
1 7
2 2
3 3
CHILD3
IDPARENT, POSITION
4 2
4 3
3 6
У всех таблиц есть столбец с именем position, где это правила:
- Таблица PARENT всегда имеет позицию = 1
- Номер позиции является последовательным для каждого родителя, который не может быть продублирован во всех таблицах.(т. е. у родителя 1 есть дочерние элементы child1, child2 и child3, но позиция является последовательной 1, 2, 3, 4, 5, 6, 7, они не повторяются через них)
- последовательность не может быть последовательной в одной и той же таблице (т.е. родитель 1 имеет в дочернем элементе 1 позицию 2 3 4 6, но 5 и 7 находятся в дочернем элементе 2).
- родительможет иметь и не иметь потомков во всех таблицах (может иметь одновременно и дочерние1 и дочерние3 одновременно или только дочерние2 или ни у кого).
- Эти таблицы являются статическими, это всегда родитель и 3children.
Я написал запрос, чтобы получить idparent с указанием их соответствующих потомков и позиции.
SELECT C.IDPARENT, '1' AS CHILD, c.POSITION
FROM Child1 c
UNION ALL
SELECT C.IDPARENT, '2' AS CHILD, c.POSITION
FROM Child2 c
UNION ALL
SELECT C.IDPARENT, '3' AS CHILD, c.POSITION
FROM Child3 c
UNION ALL
SELECT P.ID, '0' AS CHILD, P.POSITION
FROM PARENT P
ORDER BY IDPARENT, POSITION, CHILD
Он получает этот вывод с информацией выше.
IDPARENT CHILD POSITION
1 0 1
1 1 2
1 1 3
1 1 4
1 2 5
1 1 6
1 2 7
2 0 1
2 2 2
2 1 3
2 1 4
3 0 1
3 1 2
3 2 3
3 1 5
3 3 6
4 0 1
4 3 2
4 3 3
Как видите, информация корректно исчисляется и это то, что я хочу.Но здесь есть Плохая запись
3 2 3
3 1 5
Она переходит с 3 на 5 вместо 4, потому что иногда в таблице эти записи удаляются внешним веб-приложением.
Итак, после всего этого, это моя проблема в том, что относится к предмету этого вопроса.
Как я могу сделать массовое обновление всех этих таблиц, в правильном порядке, для таких записей, как
3 2 3
3 1 5
3 3 6
конвертируется в
3 2 3
3 1 4
3 3 5
Примечание. В моем примере я только что сделал одну плохую запись.В моем реальном случае у меня их много.
Я уже написал этот запрос, и это данные, которые я хочу обновить, но я знаю, что вы не можете обновить массивные таблицы, только однупо одному, но я не знаю, как обновить их в последовательном порядке, если я могу просто обновить одну таблицу за раз.Потому что, когда следующий запрос выполняется для обновления следующей таблицы, в нем теперь будут другие данные.
Спасибо всем вам заранее за чтение этого длинного вопроса и за предоставленную помощь.