Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    20

    MySQL DELETE con due INNER JOIN

    Salve a tutti.. cercherò di essere breve:

    Io ho tre tabelle composte in questo modo:


    scale unita ute_uni
    *scaid *uniid *id
    palid scaid uniid


    Vorrei riuscire ad eliminare l'unità e l'ute_uni avendo solo $palid

    Ho pensato di fare una DELETE con doppio INNER JOIN.. ma non funziona...

    Questo è quanto:

    $query = "DELETE ute_uni.*, unita.* FROM ute_uni
    INNER JOIN unita ON ute_uni.uniid = unita.uniid
    INNER JOIN scale ON unita.scaid = scale.scaid
    WHERE scale.palid = '".$palid."'";

    Avete soluzioni?...
    grazie
    Ultima modifica di DWolf; 30-05-2015 a 16:40

  2. #2
    devi fare tre delete

    delete ute_uni from ute_uni inner join unita on ute_uni.uniid=unita.uniid inner join scale on unita.scaid=scale.palid where scale.palid = '".$palid."'";
    delete unita from unita inner join scale on unita.scaid=scale.palid where scale.palid = '".$palid."'";
    delete scale where scale.palid = '".$palid."'";

    scritte a occhio... provale prima con una select

    facce sape'

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    20
    Quote Originariamente inviata da optime Visualizza il messaggio
    devi fare tre delete

    delete ute_uni from ute_uni inner join unita on ute_uni.uniid=unita.uniid inner join scale on unita.scaid=scale.palid where scale.palid = '".$palid."'";
    delete unita from unita inner join scale on unita.scaid=scale.palid where scale.palid = '".$palid."'";
    delete scale where scale.palid = '".$palid."'";

    scritte a occhio... provale prima con una select

    facce sape'
    Guardando la tua prima query mi sono accorto che avevi messo:

    inner join scale on unita.scaid=scale.palid

    scaid e palid non hanno stesso valore...

    quindi l'ho modificata in quesot modo:


    $query = "DELETE ute_uni FROM ute_uni
    INNER JOIN unita ON ute_uni.uniid = unita.uniid
    INNER JOIN scale ON unita.scaid = scale.scaid
    WHERE scale.palid = '".$palid."'";


    e non funziona uguale...

    invece funziona la seconda query:

    $query = "DELETE unita FROM unita
    INNER JOIN scale ON unita.scaid = scale.scaid
    WHERE scale.palid = '".$palid."'";


    Ste doppie inner join sono un disastro da fare

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Non puoi eliminare da 2 tabelle contemporaneamente.

    Devi eseguire 2 query a catena

    codice:
    DELETE ute_uni.* FROM (scale INNER JOIN unita ON scale.scaid = unita.scaid) INNER JOIN ute_uni ON unita.uniid = ute_uni.uniid WHERE scale.palid=.............;
    
    e poi 
    
    DELETE unita.* FROM scale INNER JOIN unita ON scale.scaid = unita.scaid WHERE scale.palid=...........;


    PS: Scusatemi
    Ho risposto senza vedere le risposte precedenti .........
    Devo stare più attento
    .
    Ultima modifica di nman; 30-05-2015 a 19:59

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    20
    Quote Originariamente inviata da nman Visualizza il messaggio

    codice:
    DELETE ute_uni.* FROM (scale INNER JOIN unita ON scale.scaid = unita.scaid) INNER JOIN ute_uni ON unita.uniid = ute_uni.uniid WHERE scale.palid=.............;
    Con questa elimino solo ute_uni? giusto?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    20
    Risolto... in realtà andava sia quella di nman che quella di optime... che anche la seguente:

    codice:
    $query = "DELETE ute_uni, unita FROM ute_uni 
    INNER JOIN unita ON ute_uni.uniid = unita.uniid
    INNER JOIN scale ON unita.scaid = scale.scaid
    WHERE scale.palid = '".$palid."'";
    Il problema era che il valore uniid non era uguale tra la tebella #unita e la tabella #ute_uni...

    quindi a questo punto mi domando se sia solo più possibile eliminare anche nella tabella new_scale...


    Grazie ad entrambi dell'aiuto!!
    Gentilissimi... e.. scusate

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da DWolf Visualizza il messaggio
    ......... quindi a questo punto mi domando se sia solo più possibile eliminare anche nella tabella new_scale ......
    Un solo DELETE non può assolutamente eliminare da più tabelle .....
    Questo vale in qualunque BataBase, e indipendentemente dai vari JOIN o non ....

    .
    Ultima modifica di nman; 30-05-2015 a 21:26

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    20
    Quote Originariamente inviata da nman Visualizza il messaggio
    Un solo DELETE non può assolutamente eliminare da più tabelle .....
    Questo vale in qualunque BataBase, e indipendentemente dai vari JOIN o non ....

    .
    non voglio assolutamente mettere in discussione quanto dici, dato che sicuramente ne so molto meno...

    ma come è possibile che elimina da più tabelle in questo caso?:

    codice:
    $query ="DELETE ute_uni, unita FROM ute_uni 
    INNER JOIN unita ON ute_uni.uniid = unita.uniid
    INNER JOIN scale ON unita.scaid = scale.scaid
    WHERE scale.palid = '".$palid."'";
    cioè.. elimina sia da ute_uni che da unita...

  9. #9
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da DWolf Visualizza il messaggio
    non voglio assolutamente mettere in discussione quanto dici,
    io invece sì, perchè una singola delete MySQL può cancellare righe da più di una tabella.
    In particolare hai usato la
    Multiple-table syntax:

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]
    per cui
    For the multiple-table syntax, DELETE deletes from each tbl_name the rows that satisfy the conditions. In this case, ORDER BY and LIMIT cannot be used.
    Se invece vuoi evitare questo comportamento devi usare il DELETE e basta
    (delete from tabella... blablabla)
    Ultima modifica di MySQL; 30-05-2015 a 23:01

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    20
    Quote Originariamente inviata da MySQL Visualizza il messaggio
    io invece sì
    Sborone u.u

    Quindi secondo te posso anche farlo tra tre o più ?!

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.