2017-01-11 4 views
-2

Ich habe drei Tabellenmit Fremdschlüssel

  1. userTable mit folgenden Zeilen Id, FirstName, LastName, Email
  2. Product A mit folgenden Zeilen Id, UserId (FK), startDate
  3. Product D mit folgenden Reihen Id, UserId (FK), startDate

Ich möchte Zeilen aus drei Tabellen mit bestimmten UserId löschen.

Was ich erreichen will -

  1. die id E-Mail gegeben finden (select id from userTable where Email = 'abc.com') - stieg wieder id - 3

  2. Delete from Product A where id = 3

  3. Delete from Product D where id = 3

  4. Delete from userTable where id = 3

Ich möchte ein Skript erstellen.

Jede Hilfe wird geschätzt oder Lernreferenz wäre großartig.

+0

Wenn ich richtig verstehe (ich wäre eine taube Nuss, wenn ich nicht tat), UserId in Produkt A/D ist FK bis ID in Tabelle userTable, richtig? –

+0

@LudvigRydahl das ist richtig! – GeekOnGadgets

Antwort

1

Deklarieren Sie eine Variable und speichern Sie die Variable id für diese Variable. Verwenden Sie das Id für die Abfrage löschen.

DECLARE @Id INT; 

SELECT @Id=id 
FROM userTable 
WHERE Email = 'abc.com' 

DELETE FROM Product A WHERE id = @Id 
DELETE FROM Product D WHERE id = @Id 
DELETE FROM userTable WHERE id = @Id 

Aber ich in Ihrem Fall denke, man UserId als FK haben so sollten Sie dies versuchen:

DELETE FROM Product A WHERE UserId= @Id 
DELETE FROM Product D WHERE UserId= @Id 
DELETE FROM userTable WHERE id = @Id 

Hinweis: Wenn Sie wollen das gleiche tun, was es in Frage, gehe zum ersten. Wenn Sie die relevanten Benutzerdatensätze aus der Tabelle A und löschen möchten, gehen Sie zur 2. Methode, bei der Sie die Datensätze über den FK löschen.

0

Von dem, was ich aus Ihrer Frage sammeln können Sie so etwas wie dies wollen:

DELETE FROM 
    userTable, 
    ProductA, 
    ProductB 
WHERE 
    userTable.Id = (select Id from userTable where Email like 'abc.com') AND 
    userTable.Id = ProductA.Id AND 
    userTable.Id = ProductB.Id; 

Und die E-Mail in der Unterabfrage in der WHERE Klausel würde Ihre Eingabeparameter

HAFTUNGSAUSSCHLUSS sein: Von einem Sybase/SQL Anywhere Hintergrund, dies wäre möglich, ich bin mir nicht sicher, ob es in SQL-Server getan werden könnte.