|
| MySQL - LEFT JOIN i en sletning af række Fra : Peter Henriksen |
Dato : 16-09-07 09:25 |
|
Jeg leder efter en SQL der kan slette alle de produkter, om ikke har en
gruppe længere.
Tabellerne:
produkter
---------
ID
Ref_Gruppe_ID
Navn
grupper
-------
ID
Jeg ser to løsninger:
- En løkke i et script der finder deres ID'er ved at LEFT JOINe med
grupper
og se hvilke der er NULL og derefter en DELETE på de ID'er
- En UPDATE og LEFT JOIN der sætter alle Ref_Gruppe_ID til 0
En DELETE på alle der har 0 i Ref_Gruppe_ID
Men er der ikke alternativer der kan klare det i een SQL?
| |
Michael Zedeler (16-09-2007)
| Kommentar Fra : Michael Zedeler |
Dato : 16-09-07 09:52 |
|
Peter Henriksen wrote:
> Jeg leder efter en SQL der kan slette alle de produkter, om ikke har en
> gruppe længere.
>
>
> Tabellerne:
>
> produkter
> ---------
> ID
> Ref_Gruppe_ID
> Navn
>
> grupper
> -------
> ID
DELETE FROM produkter WHERE Ref_Gruppe_ID IS NULL
Mvh. Michael.
| |
Peter Brodersen (16-09-2007)
| Kommentar Fra : Peter Brodersen |
Dato : 16-09-07 14:36 |
|
On Sun, 16 Sep 2007 10:51:58 +0200, Michael Zedeler
<michael@zedeler.dk> wrote:
>> Jeg leder efter en SQL der kan slette alle de produkter, om ikke har en
>> gruppe længere.
>>
>>
>> Tabellerne:
>>
>> produkter
>> ---------
>> ID
>> Ref_Gruppe_ID
>> Navn
>>
>> grupper
>> -------
>> ID
>
>DELETE FROM produkter WHERE Ref_Gruppe_ID IS NULL
Der er ingen foreign key constraint, så Ref_Gruppe_ID kan sagtens
indeholde en værdi, uden at denne findes i tabellen "grupper".
--
- Peter Brodersen
Kendt fra Internet
| |
Kristian Damm Jensen (16-09-2007)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 16-09-07 19:53 |
|
Peter Brodersen wrote:
> On Sun, 16 Sep 2007 10:51:58 +0200, Michael Zedeler
> <michael@zedeler.dk> wrote:
>
>>> Jeg leder efter en SQL der kan slette alle de produkter, om ikke
>>> har en gruppe længere.
>>>
>>>
>>> Tabellerne:
>>>
>>> produkter
>>> ---------
>>> ID
>>> Ref_Gruppe_ID
>>> Navn
>>>
>>> grupper
>>> -------
>>> ID
>>
>> DELETE FROM produkter WHERE Ref_Gruppe_ID IS NULL
>
> Der er ingen foreign key constraint, så Ref_Gruppe_ID kan sagtens
> indeholde en værdi, uden at denne findes i tabellen "grupper".
DELETE FROM produkter
WHERE not exists
(select * from grupper where produkter.Ref_Gruppe_ID = ID)
--
Venlig hilsen /Best regards
Kristian Damm Jensen
| |
Peter Henriksen (16-09-2007)
| Kommentar Fra : Peter Henriksen |
Dato : 16-09-07 20:16 |
|
> DELETE FROM produkter
> WHERE not exists
> (select * from grupper where produkter.Ref_Gruppe_ID = ID)
Ahh det er sådan man får sub selecten skruet sammen.
Forsøgte med alt muligt, men det der er da smart.
Tak.
| |
Peter Brodersen (16-09-2007)
| Kommentar Fra : Peter Brodersen |
Dato : 16-09-07 14:36 |
|
On Sun, 16 Sep 2007 10:24:48 +0200, "Peter Henriksen"
<peter.henriksen@yahoo.xxx> wrote:
>Men er der ikke alternativer der kan klare det i een SQL?
Fra MySQL 4.0 kan du lave en delete over flere tabeller. Her kan man
slette fra én tabel ved at krydsreferere over flere tabeller. Man kan
også slette fra flere tabeller på én gang, men det er ikke relevant
her.
Den query, du skal have fat i, ser sådan ud:
DELETE produkter
FROM produkter
LEFT JOIN grupper ON produkter.Ref_Gruppe_ID = grupper.ID
WHERE grupper.ID IS NULL
--
- Peter Brodersen
Kendt fra Internet
| |
Peter Henriksen (16-09-2007)
| Kommentar Fra : Peter Henriksen |
Dato : 16-09-07 20:10 |
|
"Peter Brodersen" <usenet2007@ter.dk> wrote in message
news:46ed315e$0$90275$14726298@news.sunsite.dk...
> On Sun, 16 Sep 2007 10:24:48 +0200, "Peter Henriksen"
> <peter.henriksen@yahoo.xxx> wrote:
>
>>Men er der ikke alternativer der kan klare det i een SQL?
>
> Fra MySQL 4.0 kan du lave en delete over flere tabeller.
Nice. Jeg havde netop ikke prøvet det da jeg åbenbart hang fast i 3.23
syntaks.
Nu virker det - mange tak.
| |
|
|