Pagina 1 di 7 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 70
  1. #1

    [SQL] Stesura query con controllo data

    Buongiorno ragazzi
    sto lavorando a un DB il quale è in fase di ultimazione, e per finirlo mi servirebbe un aiutino.. espongo subito il problema:

    Ho 3 tabelle così impostate:

    Componenti: ID_Componente, Nome, Cognome
    UsciteNazionali: ID_Uscita, Data
    PresenzeUSciteNazionali: ID_Uscita, ID_Componente

    Devo realizzare una query che mi visualizzi quante uscite si è fatto ogni componente quest'anno, ho provato a risolvere così

    codice:
    SELECT Componenti.Nome, Componenti.Cognome, count(PresenzeUsciteNazionali.ID_Componente) AS Nazionali FROM Componenti INNER JOIN (UsciteNazionali INNER JOIN PresenzeUsciteNazionali ON UsciteNazionali.ID_UscitaNazionale = PresenzeUsciteNazionali.ID_UscitaNazionale) ON Componenti.ID_Componente = PresenzeUsciteNazionali.ID_Componente WHERE ((UsciteNazionali.Data)>=#1/1/2013#)  GROUP BY Componenti.Nome, Componenti.Cognome
    Soltanto che mi visualizza soltanto coloro che se ne sono fatta almeno una, nascondendomi gli altri! A me invece serve che mi visualizzi ogni singolo componente dicendomi chi ne ha fatte 0 o 1+

    Grazie

  2. #2
    devi usare una LEFT JOIN invece di una INNER JOIN

  3. #3
    Niente, il risultato no cambia..

    codice:
    SELECT Componenti.Nome, Componenti.Cognome, COUNT(PresenzeUsciteNazionali.ID_Componente) AS Nazionali FROM  (UsciteNazionali LEFT JOIN PresenzeUsciteNazionali ON UsciteNazionali.ID_UscitaNazionale = PresenzeUsciteNazionali.ID_UscitaNazionale) LEFT JOIN Componenti ON Componenti.ID_Componente = PresenzeUsciteNazionali.ID_Componente WHERE (((UsciteNazionali.Data)>=#1/1/2013#)) GROUP BY Componenti.Nome, Componenti.Cognome;

  4. #4
    mi sembra di aver capito che vuoi comunque i componenti...

    Se non ho letto male al primo join puoi lasciare INNER JOIN e al secondo join devi mettere RIGHT JOIN.

    prova facci sapere...
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    ma ammetto che mi si intrecciano un po gli occhi con la query tutta su una riga...

    Comunque per ottenere anche record che non matchano devi giocare con right o left join... Fai un po di prove
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  6. #6
    Poi facci sapere
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  7. #7
    SELECT Componenti.Nome, Componenti.Cognome, count(PresenzeUsciteNazionali.ID_Componente) AS Nazionali
    FROM (UsciteNazionali LEFT JOIN PresenzeUsciteNazionali ON UsciteNazionali.ID_UscitaNazionale = PresenzeUsciteNazionali.ID_UscitaNazionale) LEFT JOIN Componenti ON Componenti.ID_Componente = PresenzeUsciteNazionali.ID_Componente
    WHERE ((UsciteNazionali.Data)>=#1/1/2013#) GROUP BY Componenti.Nome, Componenti.Cognome

    forse così è piu leggibile

    cmq sia con il LEFT ci avevo gia provato ma con il RIGHT no... ci ho provato con tutti e due facendo varie prove ma niente, non me li fa vedere tutti, mi fa vedere solo coloro che ne hanno 1+

  8. #8
    quale è la tabella di cui vuoi far vedere tutto? componenti?

  9. #9
    esatto! Devo vedere "tutti" i componenti (nome e cognome) e a fianco quanti allenamenti hanno, compreso anche chi non ne ha fatto neanche uno!

  10. #10
    ti dico la teoria: hai una tabella master e una tabella dettagli, ma non tutti i master hanno un dettaglio. se vuoi elencare TUTTI i master, anche quelli senza dettagli, metti la tabella master a sinistra della join, la tabella dettagli a destra, e fai una LEFT JOIN

    es

    Tabella Master
    MasterId
    MasterDesc

    Tabella Dettagli
    DetailId
    MasterId
    DetailDesc

    query

    SELECT colonne FROM Master LEFT JOIN DetailsON Master.MasterId=Details.MasterId

    that easy!

    (e studiati un po' di SQL )

    ari

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.