Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    9

    Principiante con SQL - aiuto per una query- ACCESS 2007

    Ciao a tutti!
    Ho bisogno di un aiuto con una query.
    Ho due tabelle.
    La prima, chiamata ORIGINE con tre colonne.
    NUMERO DI SERIE, VERSIONE, CONFRONTO

    La seconda chimata PARAGONE con solo due colonne.
    NUMERO DI SERIE, VERSIONE

    Nelle tabelle ci sono sia NUMERI DI SERIE comuni ad entrambe che NUMERI DI SERIE diversi.

    Io devo fare un confronto tra i NUMERI DI SERIE comuni a tutte e due le tabelle ma con versione differente così da inserire la parola "differente" nella colonna CONFRONTO della tabella ORIGINE.

    Uso Access 2007 e sto imparando ora a usare SQL.
    Ho provato con insert into ma a quanto pare non c'entra nulla.

    Piuttosto mi potete consigliare un testo da leggere che avrebbe potuto aiutarmi a risolvere il mio problema?
    Grazie in anticipo a chiunque vorrà rispondermi!

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Esistono 3 tipoi di query di comando

    --- INSERT Inserisce/Accoda un nuovo record
    INSERT INTO ORIGINE ( [NUMERO DI SERIE], VERSIONE ) SELECT "N° 12a" AS Ser, "Ver 32" AS Ver;



    --- UPDATE Modifica/Aggiorna un record esistente
    UPDATE ORIGINE SET ORIGINE.VERSIONE = "Ver 47" WHERE (((ORIGINE.[NUMERO DI SERIE])="N° 12a"));




    --- DELETE Cancella/Elimina un record esistente
    DELETE * FROM ORIGINE WHERE (((ORIGINE.[NUMERO DI SERIE])="N° 12a"));



    nel tuo caso la qiuery è:
    codice:
    UPDATE 
    PARAGONE 
    INNER JOIN 
    ORIGINE 
    ON 
    (PARAGONE.VERSIONE<>ORIGINE.VERSIONE) 
    AND 
    (PARAGONE.[NUMERO DI SERIE]=ORIGINE.[NUMERO DI SERIE]) 
    SET 
    ORIGINE.CONFRONTO = "differente"
    ;

    .

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    9
    Sei stato gentilissimo.
    La query ha funzionato, ma, non capisco.
    Perché update sulla tabella PARAGONE quando a logica avrei usufruito del comando INSERT.
    Il punto é che il comando INSERT INTO mi da sempre errore...

    Mi spieghi solo perché hai fatto un UPDATE della tabella PARAGONE?

    Grazie ancora!

    Ah, avresti da consigliarmi un testo o una fonte su internet per imparare SQL su access?

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    9

    Ulteriori informazioni

    Ciao, riusciresti a spiegarmi il codice che mi hai scritto?
    Perché il comando UPDATE con l'INNER JOIN mi é poco chiaro.
    Inoltre, mi sai dire se si possono concatenare più query assieme?

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333

    Re: Ulteriori informazioni

    Originariamente inviato da enoch81
    Ciao, riusciresti a spiegarmi il codice che mi hai scritto?
    Perché il comando UPDATE con l'INNER JOIN mi é poco chiaro.
    Premesso che non posso essere piu completo del link postato sopra,
    magari posso essere solo piu banale.
    ----------------------------------------------------
    hai una tabella di nome TD con campi D1, D2, D3
    poi hai un'altra tabella di nome TE con campi E1, E2

    -------- Esempio01 -----------------
    il piu semplice UPDATE immaginabile è:
    -- UPDATE TD SET D3 = "xxx";
    Updata tutti i record


    -------- Esempio03 -----------------
    Per filtrare puoi anche Updatare al posto di una tabella una vista
    se hai questa vista (Select) che si chiama V3
    -- SELECT D3 FROM TD WHERE D1 = "yyy";

    poi fai questo Update
    -- UPDATE V3 SET D3 = "xxx";

    Updata solo i record che al campo D1 sono "yyy"

    -------- Esempio04 -----------------
    oppure puoi condensare l'Esempio03 in un unica query
    -- UPDATE TD SET D3 = "xxx" WHERE D1 = "yyy";

    Questo corrisponde identicamente all' Esempio03


    -------- Esempio06 -----------------
    Adesso vuoi Updatare al campo TD.D3
    -- I record che TD.D1 = TE.E1
    -- AND i record che TD.D2 = TE.E2

    Comincia a fare una Vista V6 che con un JOIN filtra i dati
    -- SELECT D3 FROM TD INNER JOIN TE ON (TD.D1 = TE.E1) AND (TD.D2 = TE.E2);

    Adesso Updati V6
    -- UPDATE V6 SET D3 = "xxx";

    -------- Esempio07 --- QUESTO è QUELLO CHE TI INTERESSA ------------
    oppure puoi condensare l'Esempio06 in un unica query

    -- UPDATE TD INNER JOIN TE ON (TD.D1 = TE.E1) AND (TD.D2 = TE.E2) SET D3 = "xxx";

    dove al posto di -V6- hai messo -TD INNER JOIN TE ON (TD.D1 = TE.E1) AND (TD.D2 = TE.E2)-


    -------- Esempio09 -----------------
    Adesso vuoi ( ancora IDENTICAMENTE all' Esempio06 ) Updatare al campo TD.D3
    -- I record che TD.D1 = TE.E1
    -- AND i record che TD.D2 = TE.E2

    Comincia a fare una Vista V9 che filtra i dati SENZA JOIN
    -- SELECT TD.D3 FROM TD, TE WHERE (((TD.D1) In (TE.E1)) AND ((TD.D2) In (TE.E2)));

    Adesso Updati V9
    -- UPDATE V9 SET D3 = "xxx";


    -------- Esempio10 -----------------
    oppure puoi condensare l'Esempio09 in un unica query

    -- UPDATE TD, TE SET TD.D3 = "xxx" WHERE (((TD.D1) In (TE.E1)) AND ((TD.D2) In (TE.e2)));


    __________________________________________________ _____


    ora se tu nell'Esempio07 sostituisci a
    TD.D2 = TE.E2 ----> TD.D2 <> TE.E2
    TD ------------------> ORIGINE
    TE ------------------> PARAGONE
    D1 ------------------> [NUMERO DI SERIE] ( ma perche un nome di campo con degli spazi ??? )
    D2 ------------------> VERSIONE
    D3 ------------------> CONFRONTO
    E1 ------------------> [NUMERO DI SERIE]
    E2 ------------------> VERSIONE
    xxx -----------------> differente
    arrivi sostanzialmente alla query che ti avevo proposto

    __________________________________________________ ________

    Ma ora che riguardo il tutto direi che è piu simpatico l' Esempio10

    __________________________________________________ ________


    Possiamo ( e dobbiamo ) migliorare ancora.

    Esegui l'Update la prima volta e ti aggiorna per esempio 4 record
    Lo riesegui subito dopo e ti aggiorna ancora 4 record ( gli stessi )

    Se lavori in locale con pochi record va sempre bene
    ma se hai molti record magari con una connessione internet allora.....

    Prova a sitemarlo te e magari se ti da problemi ci RIdiamo un'occhiata



    Spero di non essere stato lungo e noioso

    .

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Originariamente inviato da enoch81
    mi sai dire se si possono concatenare più query assieme?

    Per "concatenare" intendi dire "Nidificare" ?

    Se si tratta di INSERT UPDATE DELETE direi che non si puo
    ( io non lo ho mai visto )


    se si tratta invece di SELECT si puo fare qualcosa

    Se hai una Vista di nome V10
    codice:
    SELECT TD.D1, TD.D2, TD.D3 FROM TD;
    Poi hai una vista di nome V11 ( con origine V10 )
    codice:
    SELECT V10.D1, V10.D2, V10.D3 FROM
    V10;
    Allora puoi eliminare V10 e modifivare V11 Cosi:
    codice:
    SELECT V10.D1, V10.D2, V10.D3 FROM
    (   ... Il testo di V10 senza il ; finale ....  ) AS V10;


    Puoi fare anche molti livelli di nidificazione ( a scapito delle prestazioni )


    Poi ci sono altre tipologie .......


    .

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    9
    Vi ringrazio per il tempo che mi avete dedicato e soprattutto per la pazienza nel rispondere.

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