[MySQL] DELETE met meerdere tabellen bij FROM

Pagina: 1
Acties:

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 26-03 21:19
Ik probeer het volgende statement uit te voeren:
DELETE FROM `download`, `able`, `file` WHERE download.abler = able.id AND able.file = file.id AND file.id = '5';

Maar krijg dan de volgende error:
#1064 - You have an error in your SQL syntax near ' `able`, `file` WHERE download.abler = able.id AND able.file = file.id AND file.' at line 1

Als ik dit probeer:
DELETE FROM `download` WHERE download.abler = able.id AND able.file = file.id AND file.id = '5';

Ik krijg de volgende (logische) error:
#1109 - Unknown table 'able' in where clause

Van http://dev.mysql.com/doc/mysql/en/DELETE.html
From MySQL 4.0, you can specify multiple tables in the DELETE statement to delete rows from one or more tables depending on a particular condition in multiple tables. However, you cannot use ORDER BY or LIMIT in a multiple-table DELETE.
Moet ik hieruit concluderen dat ik óf moet upgraden naar 4.0 (ik draai nu 3.23), óf geen 'diepe' DELETE kan doen?

Heeft iemand een mogelijke oplossing, anders dan upgraden naar 4.0?

Verwijderd

probeer dit eens (of zoiets)

DELETE FROM `download` USING `able`, `file` WHERE download.abler = able.id AND able.file = file.id AND file.id = '5';

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 26-03 21:19
Bedankt voor de snelle reactie

Helaas, ook dat werkt niet. Ik krijg deze melding:
#1064 - You have an error in your SQL syntax near 'USING `able`, `file` WHERE download.abler = able.id AND able.file = file.id AND ' at line 1

Uit de pagina van MySQL (zie link vorige post) maak ik op dat het alleen met MySQL 4.0+ kan :(

Wat is de kortst/beste manier om in het in PHP te doen met een SELECT download.id FROM `download` ... (zoals die DELETE, maar dan SELECT) en dan al die id's te DELETEn?

[ Voor 4% gewijzigd door Fl4sh3r op 27-12-2004 15:54 ]


Verwijderd

Je kan in je php source een query maken die de waarde van je voorwaarde ophaalt waaraan je delete query moet doen. Dan ga je in de afzonderlijke tabellen de data verwijderen op bassis van de gegevens van de eerder uitgevoerde query.

Om dit netjes te doen zou je middels een TRANSACTION moeten werken. Je table type zal dan wel van het type innoDB moeten zijn. Lukt één van de query's niet dan kan je alles middels ee rollback automatische weer naar de oude situatie brengen...

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
probeer eens:
code:
1
2
3
4
5
6
7
8
9
10
11
12
DELETE FROM
  download
USING
  download,
  able,
  file
WHERE
  download.abler = able.id
AND
  able.file = file.id
AND
  file.id = '5'


Mischien dat het wel werkt zo?

of anders:
code:
1
2
3
4
5
6
7
8
9
10
11
12
DELETE
  download
FROM
  download,
  able,
  file
WHERE
  download.abler = able.id
AND
  able.file = file.id
AND
  file.id = '5'

[ Voor 31% gewijzigd door Michali op 27-12-2004 16:04 ]

Noushka's Magnificent Dream | Unity


Verwijderd

en sub-queries???
code:
1
delete from tbl1 where tbl1.id in (select id from tbl2 where anderveldid = 5)

Verwijderd

:) gaat je dus niet lukken

Verwijderd

kom je toch angstvallig uit op of php programmeren om e.e.a. te verwijderen, of een stel records voor deleten te markeren (updaten) met een bitveld o.i.d. en dan los die rijen te verwijden (let ff op referentiele integriteit)
Pagina: 1