Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 38

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da Korenaar Visualizza il messaggio
    Delphi, inizio ringraziandoti per il tempo che mi stai dedicando e per le volte che stai rispondendo. Ti stai fossilizzando un pò troppo su questa o quella colonna, a me interessa la logica e un indirizzamento, quel versamenti.cifra è quote_versate.cifra, un refuso derivante dal rimaneggiamento della query di cui mi ero già accorto tentando di far girare la query stessa.

    Stringo il concetto a livello assoluto, poi me la vedo io con i termini o non ne usciamo più:

    tabella main

    tab1 |
    tab2 | - tutte collegate tramite FK a main
    tab3 |

    come la faccio una join totale? con left join no evidentemente.

    Questa query qui sopra che tu posti da il risultato nell'immagine allegata sotto, che è il classico incrocio cartesiano. Se vedi la colonna id di destra, che rappresenta quote_associative.id, si ripete 4 volte per record.
    Ciao Korenaar,

    certo, che se tu posti una query dicendo che l'hai testata e non funziona...e poi in quella query ci sono nomi di tabelle 'ignote', e la stessa sintassi della query postata e errata di partenza....che tipo di aiuto ti possiamo dare?????

    detto questo, la query che ti sto per scrivere funziona correttamente utilizzando un db firebird (e direi anche altri db), premesso che esistono tre tabelle:

    codice:
    tabella anagrafica
    id integer
    .....
    .....
    
    
    
    tabella quote_associative
    ....
    ....
    anagrafica_id integer fk anagrafica.id
    quota integer o numeric
    
    
    tabella quote_diverse
    ....
    ....
    anagrafica_id integer fk anagrafica.id
    importo integer o numeric
    
    
    
    SELECT
    anagrafica.id, 
    sum(quote_associative.quota)         AS totale_quote_associative, 
    sum(quote_diverse.importo)           AS totale_quote_div
    FROM anagrafica
    left JOIN quote_associative ON quote_associative.anagrafica_id = anagrafica.id
    left JOIN quote_diverse     ON quote_diverse.anagrafica_id = anagrafica.id
    WHERE anagrafica.id=1
    se poi a te:
    Quote Originariamente inviata da Korenaar Visualizza il messaggio
    ...a me interessa la logica e un indirizzamento...
    'interessa solo la logica o un indirizzamento'... in rete, e anhe sul sito di html.it protrai trovare tante guide valide, così come qualche post precedente aveva suggerito bomberdini

    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    consiglio un ripassino sulla sintassi del JOIN :

    http://www.html.it/pag/32151/luso-delle-join/
    ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da Korenaar Visualizza il messaggio
    Delphi, inizio ringraziandoti per il tempo che mi stai dedicando e per le volte che stai rispondendo. Ti stai fossilizzando un pò troppo su questa o quella colonna, a me interessa la logica e un indirizzamento, quel versamenti.cifra è quote_versate.cifra, un refuso derivante dal rimaneggiamento della query di cui mi ero già accorto tentando di far girare la query stessa.

    Stringo il concetto a livello assoluto, poi me la vedo io con i termini o non ne usciamo più:

    tabella main

    tab1 |
    tab2 | - tutte collegate tramite FK a main
    tab3 |

    come la faccio una join totale? con left join no evidentemente.

    Questa query qui sopra che tu posti da il risultato nell'immagine allegata sotto, che è il classico incrocio cartesiano. Se vedi la colonna id di destra, che rappresenta quote_associative.id, si ripete 4 volte per record.
    Ciao Korenaar,

    certo, che se tu posti una query dicendo che l'hai testata e non funziona...e poi in quella query ci sono nomi di tabelle 'ignote', e la stessa sintassi della query postata e errata di partenza....che tipo di aiuto ti possiamo dare?????

    detto questo, la query che ti sto per scrivere funziona correttamente utilizzando un db firebird (e direi anche altri db), premesso che esistono tre tabelle:

    codice:
    tabella anagrafica
    id integer
    .....
    .....
    
    
    
    tabella quote_associative
    ....
    ....
    anagrafica_id integer fk anagrafica.id
    quota integer o numeric
    
    
    tabella quote_diverse
    ....
    ....
    anagrafica_id integer fk anagrafica.id
    importo integer o numeric
    
    
    
    SELECT
    anagrafica.id, 
    sum(quote_associative.quota)         AS totale_quote_associative, 
    sum(quote_diverse.importo)           AS totale_quote_div
    FROM anagrafica
    left JOIN quote_associative ON quote_associative.anagrafica_id = anagrafica.id
    left JOIN quote_diverse     ON quote_diverse.anagrafica_id = anagrafica.id
    WHERE anagrafica.id=1
    group by
    anagrafica.id
    se poi a te:
    Quote Originariamente inviata da Korenaar Visualizza il messaggio
    ...a me interessa la logica e un indirizzamento...
    'interessa solo la logica o un indirizzamento'... in rete, e anhe sul sito di html.it protrai trovare tante guide valide, così come qualche post precedente aveva suggerito bomberdini

    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    consiglio un ripassino sulla sintassi del JOIN :

    http://www.html.it/pag/32151/luso-delle-join/
    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Scusa, il fatto che ci siano nomi ignoti nasce dal fatto che ho rigirato questa query una cinquantina di volte mettendo e togliendo alias.

    Comunque grazie, non fa niente. Le tabelle sono 4 e non 3, e comunque purtroppo, pur sembrandomi abbastanza logica come soluzione, la realtà dei pochi dati continua a non corrispondere al risultato che ne fuoriesce.

    Continuo a fare esperimenti, ne verrò fuori. Ti ringrazio davvero per il tempo e l'attenzione dedicata.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    se vuoi, posta lo script per la creazione di queste 4 tabelle e lo script per il loro popolamento

    cosi posso fare una prova concreta

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Guarda, ho fatto ricerche che non avevo fatto prima, ho cambiato abbastanza l'approccio.

    Ho trovato che l'approccio preso sinora causa in maniera matematica il moltiplicarsi cartesiano dei risultati. La tua query quindi in un certo senso funzionava, ma non funziona in termini di logica.

    Ho costruito questa, ma mi spara un Error Code: 1054. Unknown column 'ass.anagrafica_id' in 'on clause'.
    Te la passo qui sotto, se vuoi mollare hai tutta la mia comprensione.

    Codice PHP:
    SELECT a.old_ida.cognomea.nomeFROM anammi.anagrafica AS 
    LEFT JOIN
             
    (SELECT sum(quota), ass.anagrafica_id  
              FROM quote_associative 
    as ass) as Totquoteass ON ass.anagrafica_id a.id
    LEFT JOIN
                      
    (SELECT sum(importo), qdiv.anagrafica_id 
                       FROM anammi
    .quote_diverse as qdiv) as Totquotediv ON qdiv.anagrafica_id ass.anagrafica_id
    LEFT JOIN
                              
    (SELECT sum(cifra), vers.anagrafica_id  FROM anammi.quote_versate as vers) as TotVers ON vers.anagrafica_idqdiv.anagrafica_id  

    WHERE a
    .id 

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    hai provato a capire il significato dell'errore?

    ...forse hai sbagliato nella clausola della left join


    codice:
    SELECT a.old_id, a.cognome, a.nome
    FROM anammi.anagrafica AS a 
    LEFT JOIN (SELECT 
               sum(quota), 
               ass.anagrafica_id  
               FROM quote_associative as ass) as Totquoteass ON ass.anagrafica_id = a.id
    
    LEFT JOIN (SELECT 
               sum(importo), 
               qdiv.anagrafica_id 
               FROM anammi.quote_diverse as qdiv) as Totquotediv ON qdiv.anagrafica_id = a.id
    LEFT JOIN (SELECT 
               sum(cifra), 
               vers.anagrafica_id  
               FROM anammi.quote_versate as vers) as TotVers ON vers.anagrafica_id= a.id
    
    WHERE a.id = 1

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Si certo, ho letto che potrebbe essere un problema di scope dell'alias.

    Anche con la modifica continua a dirmi che quell'ass.anagrafica_id è unknown.

    Guarda, questa cosa mi sta facendo uscire scemo e soprattutto sto uscendo parecchio di testa. Mi sa che finisce che costruisco diversi metodi con diverse query singole e le combino. Poco pulita come soluzione, ma considerato il numero di maledizioni che ho lanciato contro chi ha inventato l'SQL in così poche ore, forse ne guadagno in salute e faccio sempre in tempo a sistemare in un secondo momento semmai svelerò l'arcano.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    inutile maledire l'sql.,
    posta lo script delle tabelle e lo script per il loro popolamento.
    e' una query semplicissima.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    ok, ti passo il dump con dati di prova delle 4 tabelle in allegato. Gli ho cambiato l'estensione in txt che altrimenti non me lo accettava.
    File allegati File allegati

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao,

    nella tua struttura:

    CREATE TABLE `quote_diverse` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `anagrafica_id` int(11) NOT NULL,
    `causale` varchar(45) DEFAULT NULL,
    `importo` varchar(45) DEFAULT NULL,
    ..........
    ..........
    CREATE TABLE `quote_versate` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `anagrafica_id` int(11) NOT NULL,
    `data` varchar(45) DEFAULT NULL,
    `cifra` varchar(45) DEFAULT NULL,
    ..........
    ..........
    CREATE TABLE `quote_associative` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `anagrafica_id` int(11) NOT NULL,
    `anno` year(4) DEFAULT NULL,
    `quota` varchar(45) DEFAULT NULL,
    ..........
    ..........

    i campi
    `importo` varchar(45) DEFAULT NULL,
    `cifra` varchar(45) DEFAULT NULL,
    `quota` varchar(45) DEFAULT NULL,

    sono dichiarati varchar.

    io non ho mai fatto la sum di campi varchar. per funzionare penso che questi devono essere numerici.
    Ultima modifica di 123delphi321; 14-05-2014 a 18:08

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.