webForumDet fria alternativet

Ta bort väldigt specifika rader

Databaser & SQLur Databashanterare & SQL

2 svar · 483 visningar · startad av Gein

GeinMedlem sedan sep. 20005 700 inlägg
#1

Detta gäller MS SQL så T-SQL är OK.

Jag har en tabell Application och en tabell Param. Däremellan finns en många-till-många-relation och för det används tabellen Application_Param. Sen finns det också en tabell Query där varje fråga kan vara kopplad till flera parametrar men varje parameter kan bara ha en fråga.

Utifrån ett specifikt ApplikationsID så vill jag nu ta bort alla frågor ur Query som är kopplat till denna och endast denna Applikation.

Det är just det där att få alla rader som inte är kopplad till någon annan applikation som jag inte får till.

Att utgå ifrån:

DELETE FROM Query 
    WHERE ID in (
        SELECT QueryID FROM Param p 
        INNER JOIN Application_Param ap ON p.Id = ap.ParamId 
        WHERE ap.ApplicationId = @AppID
        )

Men denna sväljer alltså även rader som hör ihop med andra applikationer (och som därför inte ska bort).

@ndersMedlem sedan juni 200032 969 inlägg
#2

Borde väl gå att göra typ så här:

DELETE FROM Query 
    WHERE ID in (
        SELECT QueryID FROM Param p 
        INNER JOIN Application_Param ap ON p.Id = ap.ParamId 
        WHERE ap.ApplicationId = @AppID
        )
AND ID NOT in (
        SELECT QueryID FROM Param p 
        INNER JOIN Application_Param ap ON p.Id = ap.ParamId 
        WHERE ap.ApplicationId <> @AppID
        )

mvh

GeinMedlem sedan sep. 20005 700 inlägg
#3

Ja, givetvis. Borde ha sett det där själv. Tack snabeln.

129 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)