行を削除する必要のあるテーブルが複数あり、それらはすべて1つのテーブルのデータに依存しています。たとえば、Usersテーブルがあり、UsersテーブルにUsersがあります。他のすべてのテーブルで、その1人のユーザーに関連するすべてのデータを削除しようとしています。
たとえば、Membersテーブルがあり、Membersテーブルには、Usersテーブルとの外部キー関係があるため、UserIdによって関連付けられています。メンバーテーブルには、UserIdに関連付けられた複数のメンバーを含めることができます(ユーザーは複数のもののメンバーになることができるため、1対多の関係になります)。次に、Permissionsテーブルもあり、PermissionsテーブルにはMembersテーブルとの外部キー関係があります。そして、そのテーブルでは、メンバーは複数のアクセス許可を持つことができます(メンバーは、1対多の関係である複数のものに対するアクセス許可を持つことができます)。
私がする必要があるのは、ユーザーテーブルからユーザーIDに関連するすべてのメンバーIDに関連するパーミッションテーブルのすべての行を削除することです(つまり、ボブはユーザーIDが7で、メンバーテーブルにあります。は3つのメンバーであるため、名前に3つのMemberIdが関連付けられており、権限テーブルでは、これらの3つのMemberIdにも3つのMemberIdに関連付けられた3つの権限があります。これらの3つのMemberIdに従って、9つの権限行すべてを削除してから削除する必要があります。 1つのUserIdに従って3つのメンバー行すべてを削除し、次にUserNameに従って1つのUserIdを削除します。
複数のテーブルを内部結合し、それらをユニオンに接続しようとしましたが、それらすべてのテーブルをその1つのUserIdに結び付け、ロジックのフローを通じてそのデータを運ぶのに苦労しています。
ユーザーのUserIdは7です
ユーザーは3つのMemberIdに関連付けられています
MemberIdは、複数のPermissionIdに関連付けられています
したがって、これらすべてのPermissionId(ユーザーのMemberIdに対してWHEREステートメントを実行した)、MemberIdの3つのインスタンスすべて、およびユーザーを削除する必要があります。
別のテーブルから削除するUserIDを知っている場合、これはテーブルUsersとMembersから簡単に処理できます。パーミッションテーブルからレコードを削除する場合は、サブクエリを使用する必要があります。ただし、テーブル間に関係(PK / FK)が確立されている場合は、次のような順序を維持する必要があります-
重要な注意:適切なバックアップがない限り、削除は危険な操作です。したがって、最初にテストデータに対してスクリプトを実行してみてください。
最初に、次のスクリプトを使用して、権限テーブルからレコードを削除する必要があります-
DELETE FROM Permissions
WHERE MemberID IN
(
SELECT MemberID FROM Members
WHERE UserID = 7
)
2番目のステップでは、以下のようにメンバーテーブルからレコードを削除する必要があります-
DELEET FROM Member WHERE UserID = 7
3番目のステップでは、以下のようにユーザーテーブルからユーザーを削除する必要があります-
DELETE from Users WHERE UserID = 7
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加