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

    Mysql delete from tabella where tabellamirror.record = tabella.record

    salve a tutti io vorrei cancellare da una tabella tutti quei record che corrispondono in tutto e per tutto ai record dell'altra tabella con un piccolo problema:

    la tabella principale, da cui cancellare i record,contiene alcuni campi in piu della tabella mirror,che fa da riferimento.

    come imposto la query sql?
    Sono pronto a incontrare il Creatore. Se il Creatore sia pronto all'ardua prova di incontrare me, è un'altra questione.
    -- Winston Churchill

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: Mysql delete from tabella where tabellamirror.record = tabella.record

    Originariamente inviato da fullmetalmusic
    salve a tutti io vorrei cancellare da una tabella tutti quei record che corrispondono in tutto e per tutto ai record dell'altra tabella con un piccolo problema:

    la tabella principale, da cui cancellare i record,contiene alcuni campi in piu della tabella mirror,che fa da riferimento.

    come imposto la query sql?
    Se le chiavi primarie sono differenti devi identificare una chiave funzionale (insieme di campi) che possono identificare univocamente i record di entrambe le tabelle per poterli cancellare.

  3. #3
    le chiavi primarie sono identiche,il classico id progressivo!
    Sono pronto a incontrare il Creatore. Se il Creatore sia pronto all'ardua prova di incontrare me, è un'altra questione.
    -- Winston Churchill

  4. #4
    mettiamo ch tu abbia

    tab_principale
    -----------------
    id
    nome
    cognome
    telefono


    tab_mirror
    --------------
    id
    cognome

    se ho caspito bene tu vuoi cancellare da tab_principale tutti i record che compaiono in tab_mirror...

    Ora, nel caso in cui basti l'id per identificare univocamente i record ovviamente farai
    codice:
    DELETE FROM tab_principale WHERE id in (
    SELECT id FROM tab_mirror
    )

    Nel caso invece non basti l'id, cioè se è possibile una situazione del genere

    tab_principale
    -----------------
    id - nome - cognome -telefono
    5 - PIPPO - TOPOLINO - 25689
    6 - PLUTO - MINNIE - 47555

    tab_mirror
    -----------------
    id - cognome
    5 - PAPERINO
    6 - MINNIE

    dove tu vuoi cancellare solo il record 6 , perché il 5 pur avendo lo stesso id ha cognome diverso (topolino nella principale , paperino nella mirror)

    allora devi fare:

    codice:
    DELETE FROM tab_principale WHERE id in (
    SELECT m.id FROM tab_mirror m, tab_principale p WHERE p.id_m.id AND m.cognome=p.cognome)

    Tieni presente che se hai molti record queste sono select un po' pesanti

  5. #5
    hai colpito esattamente nel segno! thanx!
    Sono pronto a incontrare il Creatore. Se il Creatore sia pronto all'ardua prova di incontrare me, è un'altra questione.
    -- Winston Churchill

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.