webForumDet fria alternativet

Delete mot data i annan tabell

1 svar · 239 visningar · startad av erka

erkaMedlem sedan dec. 19996 522 inlägg
#1

Hej!

Jag har ingen möjlighet att testa om detta fungerar eftersom det ligger skarpt på nätet men skulle detta funka

Jag har 2 tabeller
CsListsLink
--Fk_ListId
--Fk_ContactId

DistributorContacts
--Pk_ContactId
--Fk_DistId

Distributors
--Pk_DistId
--DistName

Låt oss säga att jag har en Distributör med Pk_DistId:t 24, nu vill jag ta bort alla poster i tabellen CsListsLink där den distributörens kontakter finns. Jag har ju det relaterat till posten Fk_DistId i DistributorContacts, detta skulle ge rätt resultat eller ?

DELETE FROM CsListsLink WHERE Fk_ContactId IN (SELECT Pk_ContactId FROM DistributorContacts WHERE Fk_DistId = 24

Eller skulle man kunna skriva det med någon form av Exists ?

Tack!

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Det borde vara ok (om du lägger till en avslutande ) )

Det går att skriva om med exists, det kan ha betydelse prestandamässigt (om DBMS inte optimerar så bra).

DELETE FROM CsListsLink WHERE exists (SELECT 1 FROM DistributorContacts WHERE Fk_DistId = 24
and pk_contactid = CsListsLink.fk_contactid)

Du kan ju testa ut saker om du gör så här

start transaction 
delete
select 
rollback

start transaction kan heta något annat, beroende på databashanterare.

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