Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [mysql 4.x] Delete di record provenienti da una query

    Salve a tutti,

    ho 2 tabelle objblobvalue(Blob_id,Object_id,value) e allblob(Blob_id, name_file)

    la query seguente sulla tabella objblobvalue
    SELECT Blob_id FROM objblobvalue WHERE Object_id=231
    mi restituisce n record
    *********
    * Blob_Id *
    *********
    * 341 *
    * 345 *
    * 347 *
    *********

    ora dovre cancellare dalla tabella allBlob, la cui PK è il campo Blob_id , i record risulatanti dalla query precedente. E' possibile fare questa cancellazione in un colpo solo, ovvero con un uniaca istruzione SQL?

    Grazie a tutti

  2. #2
    codice:
    DELETE allblob 
    FROM allblob, objblobvalue
    where allblob.Blob_id = objblobvalue.Blob_id
    and objblobvalue.Object_id = 231
    prova prima su una copia della tabella.....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Ciao piero.mac,

    tu sei un grande, la tua soluzione è funzionata al primo colpo
    Ora di chiedo cortesemente di spiegarmela.

    Davi sapere che sono talmente ciordo che non riesco a capiere coma possa funzionare nonostante i due 27 presi agli esami di "basi di dati" (era il lontano 1997).


    hai fatto un prodotto cartesiano (FROM allblob, objblobvalue) ma poi la cancellazione la fai solo su allblob. Com' è che si cancellano anche i record di objblobvalue?
    In base a quali criteri vengono cancellati i record di allblob?


    Grazir mille

  4. #4
    E' un delete multitabella...

    delete tab1 <--- tabella che cancellera' i record, potrebbero anche essere entrambe le tabelle
    from tab1, tab2 <--- questa e' una INNER JOIN "vulgaris"
    where tab1.id = tab2.id <--- imposto la equi-join desiderata
    AND tab1.pippo = 'pippo' <--- pongo la condizione che individua i record voluti e mi para da Cartesio

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    delete tab1 <--- tabella che cancellera' i record, potrebbero anche essere entrambe le tabelle
    la cancellazione a me avvine già sulle tutte e due tabella anche se specifico solo la allblob dopo la clausola DELETE, probabilmente per via della relazione 1-n (cascate on delete) che ho impostato, dico bene?

  6. #6
    Originariamente inviato da Marvellous
    la cancellazione a me avvine già sulle tutte e due tabella anche se specifico solo la allblob dopo la clausola DELETE, probabilmente per via della relazione 1-n (cascate on delete) che ho impostato, dico bene?
    ma veramente le tabelle in FROM servono solo da reference. Dovrebbe cancellare solo i record dalla/e tabelle in DELETE.

    Usi forse delle inno db con FK..?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Usi forse delle inno db con FK..?
    confermo... uso innodb con FK.
    Faccio male?

  8. #8
    Originariamente inviato da Marvellous
    confermo... uso innodb con FK.
    Faccio male?
    Assolutamente no, ma se hai impostato ON DELETE CASCADE ovvio che in assenza di riferimenti ti cancelli anche il record nell'altra tabella.

    Ma e' una azione che non e' compresa nella query delete di prima, ma bensi' nel riferimento della FK

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.