/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL: Kaskade-sletning via ren SQL uden '~
Fra : Kim Bach Petersen


Dato : 18-10-08 13:02

Jeg har tre tabeller, som beskriver et hierarki, sådan et en post tX kan
have relatere til mange poster i tY, hvor hver post igen kan relatere
til mange i tZ. Relationen dannes ved at id fra den første tabel bruges
som nøgle i den anden etc.

tX: xid tekst

tY: yid xid tekst

tZ: zid yid tekst

Nu vil jeg gerne have det sådan, at når jeg sletter en post i tX, så
slettes alle relaterede poster i tY og tZ også.

Det ville være dejligt enkelt, hvis tZ refererede direkte til tY også,
men sådan er det aktuelt ikke, ligesom jeg i første gang gerne vil kunne
lave løsningen i ren SQL uden at skulle modificere tabelstrukturen med
references/on delete cascade.

Er der nogen, der har en lys idé?

Pft, Kim

 
 
Peter Lykkegaard (18-10-2008)
Kommentar
Fra : Peter Lykkegaard


Dato : 18-10-08 14:32

"Kim Bach Petersen" skrev

> Nu vil jeg gerne have det sådan, at når jeg sletter en post i tX, så
> slettes alle relaterede poster i tY og tZ også.
>
Når du ikke bruger on cascade så skal du bruge 3 statements

Du kan lave en konstruktion med "IF NOT EXISTS" og tjekke på dine primary
keys
http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

- Peter





Kim Bach Petersen (18-10-2008)
Kommentar
Fra : Kim Bach Petersen


Dato : 18-10-08 15:09

Peter Lykkegaard skrev:

>> Nu vil jeg gerne have det sådan, at når jeg sletter en post i tX, så
>> slettes alle relaterede poster i tY og tZ også.
>>
> Når du ikke bruger on cascade så skal du bruge 3 statements
>
> Du kan lave en konstruktion med "IF NOT EXISTS" og tjekke på dine
> primary keys
> http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

Tak , "exists" var lige det, der skulle få den sidste delete til at fungere:

DELETE FROM tZ WHERE EXISTS (SELECT * FROM tY WHERE tZ.zid=tY.yid AND
tY.xid="3")

Kim

Arne Vajhøj (18-10-2008)
Kommentar
Fra : Arne Vajhøj


Dato : 18-10-08 14:54

Kim Bach Petersen wrote:
> Jeg har tre tabeller, som beskriver et hierarki, sådan et en post tX kan
> have relatere til mange poster i tY, hvor hver post igen kan relatere
> til mange i tZ. Relationen dannes ved at id fra den første tabel bruges
> som nøgle i den anden etc.
>
> tX: xid tekst
>
> tY: yid xid tekst
>
> tZ: zid yid tekst
>
> Nu vil jeg gerne have det sådan, at når jeg sletter en post i tX, så
> slettes alle relaterede poster i tY og tZ også.
>
> Det ville være dejligt enkelt, hvis tZ refererede direkte til tY også,
> men sådan er det aktuelt ikke, ligesom jeg i første gang gerne vil kunne
> lave løsningen i ren SQL uden at skulle modificere tabelstrukturen med
> references/on delete cascade.
>
> Er der nogen, der har en lys idé?

3 muligheder:
- InnoDB tabeller og cascade delete
- MySQL 5.x og trigger
- 3 x delete i applikationen

Arne

Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste