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

    Problemi con query DELETE su ACCESS

    Ciao a tutti...
    Io devo cancellare dei record su una tabella "Resoconti", ovviamente non devo cancellarli tutti ma solo quelli che si trovano anche su un'altra tabella chiamata "ResocontiTemp" ho
    fatto questa query

    DELETE FROM [Resoconti]
    WHERE SalesPersonID IN
    (
    SELECT [ResocontiTemp].[Ora], [ResocontiTemp].[Data], [ResocontiTemp].[NReso]
    FROM [ResocontiTemp]
    WHERE
    [ResocontiTemp].[Ora]=[Resoconti].[Ora] AND
    [ResocontiTemp].[Data]=[Resoconti].[Data] AND
    [ResocontiTemp].[NReso]=[Resoconti].[NReso]
    );

    Pero quando la eseguo mi da questo errore:
    "E stata scritta una sottoquery che può restituire più campi senza utilizzare la parola EXISTS ........."


    Qualcuno mi sa dire come faccio a risolvere il problema?????


    Grazie e Ciao....

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    La sottoquery deve contenere esattamente l'elenco dei valori da confrontare con il campo nella clausola WHERE della query principale... quindi devi selezionare solo i valori da confrontare, non tutti i campi che vuoi...

    Ora, non sapendo che valori assume SalesPersonID, e non sapendo niente della struttura delle tabelle, non ho idea di come modificare la sottoquery... certo è che la sottoquery deve restituire solo valori che possono essere confrontati con SalesPersonID (quindi immagino dei numeri) e non dei record contenenti Ora, Data e NReso...

    Qualcosa del genere (è pseudo-codice che butto lì a naso):
    codice:
    DELETE FROM [Resoconti]
    WHERE SalesPersonID IN
    (
       SELECT SalesPersonID
       FROM [ResocontiTemp]
       WHERE
          (([ResocontiTemp].[Ora]=[Resoconti].[Ora]) AND
           ([ResocontiTemp].[Data]=[Resoconti].[Data]) AND
           ([ResocontiTemp].[NReso]=[Resoconti].[NReso]))
    );
    PS: utilizza sempre le parentesi (anche se ridondanti), che ti evitano un sacco di problemi!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ok ho provato a togliere la variabile....

    Cmq si sapresti dire un'altro modo funzionante per fare la stessa cosa?

    Fare un DELETE nella tabella Resoconti ma cancellare solo i record che sono presenti nella tabella ResocontiTemp

    Ad esempio questa query lo fatta per SQL-SERVER e fa la stessa e identica cosa e funziona perfettamente

    DELETE FROM Gesionale.dbo.[Resoconti] WHERE
    EXISTS(
    SELECT Gesionale_temp.dbo.[Resoconti].* FROM Gesionale_temp.dbo.[Resoconti]
    WHERE
    Gesionale_temp.dbo.[Resoconti].[Ora] = Gesionale.dbo.[Resoconti].[Ora] AND
    Gesionale_temp.dbo.[Resoconti].[Data] = Gesionale.dbo.[Resoconti].[Data] AND
    Gesionale_temp.dbo.[Resoconti].[NReso]= Gesionale.dbo.[Resoconti].[NReso]
    );


    Io devo fare una cosa simile per access ma non ci riesco......

  4. #4
    in sql standard sarebbe, ma in access non saprei se funziona

    DELETE Resoconti.*
    FROM Resoconti inner join ResocontiTemp on
    [ResocontiTemp].[Ora]=[Resoconti].[Ora] AND
    [ResocontiTemp].[Data]=[Resoconti].[Data] AND
    [ResocontiTemp].[NReso]=[Resoconti].[NReso]

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.