Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    [mysql5] integrità referenziale manuale

    Ho due tabelle:
    FATTURE
    id
    numero
    data

    e

    RIGHE_FATTURE
    id
    id_fattura
    articolo
    qta
    prezzo


    Ho cancellato delle fatture, come faccio a scrivere una query che mi cancelli solo le istanze di righe_fatture che non trovano una corrispondenza in fatture?

    Seconda domanda, con mysql 5, non c'è un modo di avere integrità referenziale in automatico? C'è un modo per definire le relazioni tra tabelle in modo che posso cancellare solo le fatture e mysql pensa a cancellare in automatico tutte le righe_fatture associate?

  2. #2
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Riesco a selezionare le righe da cancellare, così
    Codice PHP:
    SELECT FROM righe_fatture
    LEFT JOIN fatture ON righe_fatture
    .id_fattura=fatture.id
    WHERE fatture
    .id IS NULL 

    ma se lo faccio con la DELETE mi da errore di sintassi:
    Codice PHP:
    DELETE FROM righe_fatture
    LEFT JOIN fatture ON righe_fatture
    .id_fattura=fatture.id
    WHERE fatture
    .id IS NULL 

  3. #3
    beh che ti dia errore se provi a fare ua JOIN in un DELETE mi sembra normale....le JOIN producono delle tabelle "virtuali" fondendo due o più tabelle.

    E' ovvio che se vuoi cancellare qualcosa che nel tuo database non esiste (una tupla della tabella "virtuale") ti dia errore.

    Comunque è strano che tu "conosca" l'esistenza delle join e non riesca a fare un delete...

    codice:
    DELETE FROM righe_fatture WHERE id_fattura = '$id'
    Dove $id è lo stesso ID che hai cancellato da "fatture"...

    oppure se proprio la vogliamo fare complicata :
    codice:
    DELETE FROM righe_fatture WHERE id_fattura NOT IN (
       SELECT id AS id_fattura
       FROM fatture
    );
    Administrator of NAMDesign.Net

  4. #4
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da LeaderGL
    beh che ti dia errore se provi a fare ua JOIN in un DELETE mi sembra normale....le JOIN producono delle tabelle "virtuali" fondendo due o più tabelle.

    E' ovvio che se vuoi cancellare qualcosa che nel tuo database non esiste (una tupla della tabella "virtuale") ti dia errore.

    Comunque è strano che tu "conosca" l'esistenza delle join e non riesca a fare un delete...

    codice:
    DELETE FROM righe_fatture WHERE id_fattura = '$id'
    Dove $id è lo stesso ID che hai cancellato da "fatture"...

    oppure se proprio la vogliamo fare complicata :
    codice:
    DELETE FROM righe_fatture WHERE id_fattura NOT IN (
       SELECT id AS id_fattura
       FROM fatture
    );
    Non è che non so fare una delete, ma non sapevo fare una delete su questo caso specifico, non ci avevo pensato proprio a nidificare una select e sare la IN! Grazie mille!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.