webForumDet fria alternativet

Ta bort från Child om Parent inte längre finns

Databaser & SQL

4 svar · 381 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Frågan#1

SqlServer 2005

Ibland kan det bli så som nedan att Table1 rader tas bort, men Table2 rader bli kvar. Skulle då vilja ta bort de Table2 rader vars Table2.Table1Id inte längre har en relation till Table1.

Hur skulle detta går till?

CREATE TABLE [Table1] (
	[Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
	[Quantity] [int] NOT NULL ,
	CONSTRAINT [PK_Table1] PRIMARY KEY  CLUSTERED 
	(
		[Id]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

CREATE TABLE [Table2] (
	[Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
	[Table1Id] [int] NOT NULL ,
	[QuantityMinusValue] [int] NOT NULL ,
	CONSTRAINT [PK_Table2] PRIMARY KEY  CLUSTERED 
	(
		[Id]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

INSERT INTO dbo.[Table1](Quantity) VALUES(9); //Id = 1

INSERT INTO dbo.[Table2](Table1Id, QuantityMinusValue) VALUES(1, 13);//Table1Id = 1
INSERT INTO dbo.[Table2](Table1Id, QuantityMinusValue) VALUES(18, 55);
Medlem sedan juni 20008 205 inlägg
#2

Typ
DELETE FROM Table2 t2 WHERE NOT EXISTS (SELECT t1.Id FROM Table1 t1 WHERE t1.Id = t2.Table1Id)

Medlem sedan sep. 20011 914 inlägg
#3

Det gick inte. Kan inte ha t2 i "DELETE FROM Table2 t2... ".

Medlem sedan dec. 20025 483 inlägg
#4
DELETE Table2 FROM Table2 t2 WHERE NOT EXISTS (SELECT t1.Id FROM Table1 t1 WHERE t1.Id = t2.Table1Id)
Medlem sedan sep. 20011 914 inlägg
#5

Det gick bättre. Tackar så mycket.

252 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)