У меня есть несколько таблиц, из которых мне нужно удалить строки, и все они зависят от данных из одной таблицы. Например, у меня есть таблица пользователей, а в таблице пользователей у пользователей есть идентификатор пользователя. Я пытаюсь избавиться от всех данных, относящихся к этому пользователю, во всех других таблицах.
Например, есть таблица «Участники», а в таблице «Участники» есть отношение внешнего ключа к таблице «Пользователи», поэтому оно связано с идентификатором пользователя. В таблице 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.
пометить соответствующее имя базы данных. из скольких таблиц вы хотите удалить записи? Можете ли вы предоставить некоторые образцы данных из всех таблиц с указанием того, какие строки и почему они должны быть удалены?
@mkRabbani Я включил изображения, которые, надеюсь, помогут. Спасибо.
Итак, вам нужно только удалить записи из таблицы Member-Permission. Верно?
@mkRabbani Мне нужно удалить все строки из таблицы разрешений, которые относятся ко всем MemberId, и эти MemberId зависят от всех MemberId из таблицы Member относительно UserId, и все это зависит от UserId из таблицы пользователя в соответствии с именем пользователя. Таким образом, каждая строка в таблице разрешений, имеющая MemberId, связана с UserId из таблицы User. Необходимо удалить строку UserId 7, 3 строки в таблице Members, которые относятся к UserId 7, и все разрешения, которые относятся ко всем этим 3 MemberId.
@kpschwert Я отправил ответ, пожалуйста, проверьте.
Если вам известен 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
Я думаю, вы могли бы после «каскадного удаления»? Этот другой вопрос может помочь пролить свет — stackoverflow.com/questions/6260688/…