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

    Creare un report globale

    Ciao a tutti,
    ogni tanto devo tornare a chiedere aiuto.
    Ho un database con diverse tabelle collegate tra loro e dovrei creare un report globale.
    Pensavo di fare semplicemente con il JOIN ma vedo che non mi estrae tutte le informazioni che ci sono nelle varie tabelle.
    La situazione e' questa:
    Ho una tabella principale chiamata Dipendenti e una serie di altre tabelle che sono legate a questa.
    Per esempio ho Assunzioni e VisiteMediche che sono legate direttamente a Dipendenti (Dipendenti.Id = Assunzioni.Dipendenti_Id e Dipendneti.Id = VisiteMediche.Dipendenti_Id), ma poi ho anche Livelli e TipiScadenze che sono legate ad Assunzioni (Assunzioni.Livelli_Id = Livelli.Id e Assunzioni.TipiScadenze_Id = TipiScadenze.Id) e ancora TipiScadenze che e' legata a VisiteMediche (VisiteMediche.TipiScadenze_Id = TipiScadenze_Id).
    Poi ci sarebbero molte altre tabelle, ma credo che gia' con quelle che ho riportato si possa capire la problematica.
    Tenendo presente che usando solo JOIN (LEFT, RIGHT e INNTER) non ho avuto i risultati sperati, come posso strutturare una query per poter estrarre tutti i dati di tutte le tabelle correlate tra loro?

    Questa e' la query che ho scritto (limitata solo alle tabelle specificate sopra):
    SELECT d.Cognome, d.Nome, d.Indirizzo, d.Cap, d.Citta, d.Provincia,
    a.DataAssunzione AS 'Data assunzione', a.DataDimissione AS 'Data dimissione', a.OreContratto AS 'Ore contratto', asv.Descrizione AS 'Tipo Scadenza', a.DataScadenza AS 'Data scadenza',
    vm.DataVisita AS 'Data visita', vm.TipoVisita AS 'Tipo Visita', vss.Descrizione AS 'Scadenza visita'
    FROM dipendenti d
    RIGHT JOIN assunzioni a ON a.Dipendenti_Id = d.id
    LEFT JOIN livelli l ON l.Id = a.Livelli_id
    LEFT JOIN tipiscadenze asv ON asv.Id = a.TipiScadenze_Id
    RIGHT JOIN visitemediche vm ON vm.id = d.id
    LEFT JOIN tipiscadenze vss ON vss.id = vm.TipiScadenze_id
    ORDER BY Cognome, Nome
    Grazie.
    Stefanoxjx

  2. #2
    attenzione alle JOIN. Ad esempio RIGHT JOIN visitemediche vm ON vm.id = d.id fa in modo che vengano estratti solo i dipendenti che hanno un record nella tabella visitemediche

  3. #3
    Quindi quale potrebbe essere la giusta strada da seguire?
    Sto guardando se Union fa al caso mio, ma non sembrerebbe.
    Stefanoxjx

  4. #4
    le JOIN giuste! anche se diffido dai report globali, spesso sono illeggibili... meglio dei report studiati ad-hoc.

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