Удалить строки из нескольких таблиц из-за данных из одной таблицы

У меня есть несколько таблиц, из которых мне нужно удалить строки, и все они зависят от данных из одной таблицы. Например, у меня есть таблица пользователей, а в таблице пользователей у пользователей есть идентификатор пользователя. Я пытаюсь избавиться от всех данных, относящихся к этому пользователю, во всех других таблицах.

Например, есть таблица «Участники», а в таблице «Участники» есть отношение внешнего ключа к таблице «Пользователи», поэтому оно связано с идентификатором пользователя. В таблице Members может быть несколько членов, связанных с UserId (пользователь может быть членом более чем одной вещи, поэтому это отношение один ко многим). Затем есть также таблица разрешений, и в таблице разрешений она имеет отношение внешнего ключа к таблице членов. И в этой таблице члены могут иметь несколько разрешений (член может иметь разрешения более чем на одну вещь, это отношение «один ко многим»).

Что мне нужно сделать, так это удалить все строки в таблице разрешений, которые относятся ко всем идентификаторам MemberId, которые относятся к идентификатору пользователя из таблицы пользователя (т.е. - у Боба есть идентификатор пользователя 7, а в таблице участников он является членом 3 вещей, поэтому у него есть 3 MemberId, связанные с его именем, и в таблице разрешений эти 3 MemberId также имеют 3 разрешения, связанные с этими 3 MemberIds.Мне нужно удалить все 9 строк разрешений в соответствии с этими 3 MemberId, а затем удалить все 3 строки участника в соответствии с 1 идентификатором пользователя, а затем удалите один идентификатор пользователя в соответствии с именем пользователя).

Я пытался соединить несколько таблиц Inner Join, а также связать их с Unions, но мне трудно связать все эти таблицы с этим одним UserId и перенести эти данные через поток логики.

Пользователь имеет UserId 7

Удалить строки из нескольких таблиц из-за данных из одной таблицы

Пользователь связан с 3 MemberId

Удалить строки из нескольких таблиц из-за данных из одной таблицы

MemberId связан с несколькими PermissionId

Удалить строки из нескольких таблиц из-за данных из одной таблицы

Поэтому мне нужно удалить все эти PermissionId (я сделал оператор WHERE только для UserId), все 3 экземпляра MemberId и User.

Я думаю, вы могли бы после «каскадного удаления»? Этот другой вопрос может помочь пролить свет — stackoverflow.com/questions/6260688/…

Navik Hiralal 31.05.2019 06:59

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

mkRabbani 31.05.2019 07:48

@mkRabbani Я включил изображения, которые, надеюсь, помогут. Спасибо.

kpschwert 31.05.2019 13:36

Итак, вам нужно только удалить записи из таблицы Member-Permission. Верно?

mkRabbani 31.05.2019 13:39

@mkRabbani Мне нужно удалить все строки из таблицы разрешений, которые относятся ко всем MemberId, и эти MemberId зависят от всех MemberId из таблицы Member относительно UserId, и все это зависит от UserId из таблицы пользователя в соответствии с именем пользователя. Таким образом, каждая строка в таблице разрешений, имеющая MemberId, связана с UserId из таблицы User. Необходимо удалить строку UserId 7, 3 строки в таблице Members, которые относятся к UserId 7, и все разрешения, которые относятся ко всем этим 3 MemberId.

kpschwert 31.05.2019 13:51

@kpschwert Я отправил ответ, пожалуйста, проверьте.

mkRabbani 31.05.2019 13:53
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
6
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вам известен UserID, который вы хотите удалить из другой таблицы, это легко сделать из таблицы Users and Members. Вам нужно использовать подзапрос, когда вы будете удалять записи из таблицы разрешений. Но если между таблицами установлена ​​связь (PK/FK), вам необходимо поддерживать некоторую последовательность, как показано ниже:

Важная заметка: Удаление — рискованная операция, если у вас нет надлежащего резервного копирования. Поэтому попробуйте сначала выполнить скрипты на тестовых данных.

Сначала вам нужно удалить записи из таблицы разрешений с помощью следующего скрипта:

DELETE FROM Permissions
WHERE MemberID IN 
(
    SELECT MemberID FROM Members
    WHERE UserID = 7
)

На втором этапе вы должны удалить записи из таблицы «Участники», как показано ниже:

DELEET FROM Member WHERE UserID = 7

На третьем шаге вы должны удалить пользователей из таблицы «Пользователи», как показано ниже:

DELETE from Users WHERE UserID = 7

Другие вопросы по теме

Как удалять буквы только тогда, когда они образуют слово (т.е. &Co.), а не тогда, когда они являются частью слова (Со-инструкция)
Объединение перекрывающихся временных интервалов на основе иерархии в SQL
Обход ограничения на количество символов в OPENQUERY при неудачном использовании EXECUTE
Создайте таблицу (таблицы) с пользователями и группами
Как найти список отсутствующих символов в столбце из другого столбца
Использование LAG/LEAD для поиска пиков в данных дает десятичные изменения (например, 9, 99, 999), а также правильные пики
Мне нужно получить данные, где переменная = одна вещь, а также вернуть данные, в соответствии с которыми то же самое соответствует другой переменной
Как объединить строки на основе идентификатора,
Как обойти ошибку: составной идентификатор "p.ra" не может быть связан в SQL
Запрос одного и того же столбца для 3 разных значений