Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [Mysql] Problema UNION

  1. #1

    [Mysql] Problema UNION

    ciao!

    ho due tabelle (entrate e uscite) che sono speculari.
    hanno la stessa struttura, cambiando ovviamente in nomi dei campi.
    sto provando ad unirle in query tramite UNION, ma i valori sono sfalzati.
    o meglio, non vengono tirati su alcuni valori della tabella uscite:
    codice:
    SELECT * FROM entrate e
    INNER JOIN causali ON e.causale_id = causali.causale_id
    INNER JOIN conti ON e.conto_id = conti.conto_id
    WHERE e.utente_id = ?
    UNION
    SELECT * FROM uscite u
    INNER JOIN causali ON u.causale_id = causali.causale_id
    INNER JOIN conti ON u.conto_id = conti.conto_id
    WHERE u.utente_id = ?
    dove sto sbagliando??

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    Probabilmente il problema è che hai usato UNION, non UNION ALL. Per default rimuove le righe duplicate. Comunque l'ho semplificata... in questo modo oltre a essere più chiara è più performante perché eviti di copiare le righe di conti e causali in una tabella temporanea.

    SELECT * FROM
    (
    SELECT * FROM entrate
    WHERE utente_id = ?
    UNION ALL
    SELECT * FROM uscite
    WHERE utente_id = ?
    ) m
    INNER JOIN causali ca ON m.causale_id = ca.causale_id
    INNER JOIN conti co ON m.conto_id = co.conto_id
    WHERE m.utente_id = ?

  3. #3
    ciao!

    ho provato anche con UNION ALL, ma non è cambiaot nulla.
    forse devo fare come dici te.
    faccio un altro pò di prove!

    intanto grazie!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ciao!

    ho due tabelle (entrate e uscite) che sono speculari.
    hanno la stessa struttura, cambiando ovviamente in nomi dei campi.
    sto provando ad unirle in query tramite UNION, ma i valori sono sfalzati.
    o meglio, non vengono tirati su alcuni valori della tabella uscite:
    codice:
    SELECT * FROM entrate e
    INNER JOIN causali ON e.causale_id = causali.causale_id
    INNER JOIN conti ON e.conto_id = conti.conto_id
    WHERE e.utente_id = ?
    UNION
    SELECT * FROM uscite u
    INNER JOIN causali ON u.causale_id = causali.causale_id
    INNER JOIN conti ON u.conto_id = conti.conto_id
    WHERE u.utente_id = ?
    dove sto sbagliando??
    forse il prblema è il nome dei campi.

    posta la struttura delle tablelle.

  5. #5
    entrata_id
    entrata_valore
    causale_id
    conto_id
    entrata_data
    utente_id

    per le uscite è uguale con la parola uscita al posto di entrata.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    codice:
    select
    entrate.entrata_id     as id,
    entrate.entrata_valore as valore,
    entrate.causale_id,
    entrate.conto_id,
    entrate.entrata_data   as data,
    entrate.utente_id
    from entrate
    INNER JOIN causali ON entrate.causale_id = causali.causale_id
    INNER JOIN conti ON entrate.conto_id = conti.conto_id
    
    union
    
    select
    uscite.uscita_id     as id,
    uscite.uscita_valore as valore,
    uscite.causale_id,
    uscite.conto_id,
    uscite.uscita_data   as data,
    uscite.utente_id
    from uscite
    INNER JOIN causali ON uscite.causale_id = causali.causale_id
    INNER JOIN conti ON uscite.conto_id = conti.conto_id

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    Se la tua query funziona il problema non sono i nomi delle colonne. Puoi postare i risultati che ottieni e quelli che invece vorresti ottenere?

  8. #8
    ciao!
    intanto grazie per la dritta!

    facendo un passo in più, se io volessi identificare se il valore è una uscita o una entrata?
    perchè così il campo valore dovrebbe contenere tutti i valori indistintamente uno sotto l'altro.

    codice:
    select
    entrate.entrata_id     as id,
    entrate.entrata_valore as valore,
    entrate.entrata_data   as data,
    entrate.utente_id
    from entrate
    
    union all
    
    select
    uscite.uscita_id     as id,
    uscite.uscita_valore as valore,
    uscite.uscita_data   as data,
    uscite.utente_id
    from uscite

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    uno modo protrebbe essere cosi:

    codice:
    select
    entrate.entrata_id       as id,
    entrate.entrata_valore   as v_entrata,
    cast(0 as numeric(15,2)) as v_uscita,
    entrate.entrata_data     as data,
    entrate.utente_id
    from entrate
    
    union all
    
    select
    uscite.uscita_id         as id,
    cast(0 as numeric(15,2)) as v_entrata,
    uscite.uscita_valore     as v_uscita,
    uscite.uscita_data       as data,
    uscite.utente_id
    from uscite

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    oppure per le uscite fai -uscita_valore, così diventa negativo e puoi fare la somma.

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.