Query

di il
11 risposte

Query

Vorrei fare questa query ma mi da errore 1054 e non capisco perchè...
ho la tabella cliente con atributi(idcliente,nome,cognome) e la tabella eventi (idevento, data) ho anche la relazione partecipa (idcliente,idevento) che le collega

Selezionare tutti i cliente e, per ciascuno di essi l'evento associato e la data in cui avviene.

select cliente, count(*), e.Data
from cliente as c join evento as e
on (c.IdCliente = e.IdEvento)
group by evento;

11 Risposte

  • Re: Query

    mikemayster ha scritto:


    Vorrei fare questa query ma mi da errore 1054 e non capisco perchè...
    ho la tabella cliente con atributi(idcliente,nome,cognome) e la tabella eventi (idevento, data) ho anche la relazione partecipa (idcliente,idevento) che le collega

    Selezionare tutti i cliente e, per ciascuno di essi l'evento associato e la data in cui avviene.

    select cliente, count(*), e.Data
    from cliente as c join evento as e
    on (c.IdCliente = e.IdEvento)
    group by evento;
    hai il nome di un campo uguale al nome della tabella? pessima idea. Vedo [cliente] ed [evento] usati sia come nome tabella sia come nome campo.
    Pessima idea anche l'uso di un campo chiamato "Data"... non è una parola riservata ma... quasi. Meglio un DataEvento.
    Devi indicare il campo per cui vuoi fare il count, immagino IdCliente.
    Anche la data dell'evento deve avere una funzione di aggregazione oppure, come è probabile, devi aggiungere quel campo al Group By
    Visto che usi la dot notation, anteponi a tutti i campi la tabella in cui si trovano.
    select c.cliente, count(c.IdCliente), e.Data 
    from cliente as c join evento as e 
    on (c.IdCliente = e.IdEvento)
    group by e.evento, e.Data;
    l'ho tirata un po' a caso.
    Il Group By forse è meglio farlo per IDevento.
  • Re: Query

    Vedo [cliente] ed [evento] usati sia come nome tabella sia come nome campo.
    non ho capito scusa
  • Re: Query

    mikemayster ha scritto:


    ho la tabella cliente con atributi(idcliente,nome,cognome) e la tabella eventi (idevento, data) ho anche la relazione partecipa (idcliente,idevento) che le collega
    OK.

    mikemayster ha scritto:


    Selezionare tutti i cliente e, per ciascuno di essi l'evento associato e la data in cui avviene.
    Questa frase, così come l'hai descritta, non mi è chiara a livello di query.

    Qualcosa mi dice che non hai bisogno di una query, ma desideri visualizzare "certi dati" in un certo modo.
    Chiarisci tutto per bene. Tieni conto che io non so interpretare bene l'SQL.
  • Re: Query

    Voglio che mi faccia vedere tutti i cliente e se hanno associato a loro un evento o piu, voglio vedere accanto a nome,cognome del cliente la data del evento e il titolo...ps ho anche titolo come atributo nella tabella evento
  • Re: Query

    mikemayster ha scritto:


    Vedo [cliente] ed [evento] usati sia come nome tabella sia come nome campo.
    non ho capito scusa
    Questa è la tua query con interruzioni di riga modificate per avere un numero della riga di riferimento
    1=   select 
    2=   cliente, 
    3=   count(*), e.Data from 
    4=   cliente 
    5=   as c join 
    6=   evento 
    7=   as e on (c.IdCliente = e.IdEvento) group by 
    8=   evento;
    [cliente]: è sia nella riga num. 2, subito dopo SELECT, dove si mettono i campi, sia alla riga num 4, dopo FROM, dove si elencano le tabelle (o altre query, vabbè) quindi [cliente], per come è scritto qui è sia campo sia tabella;
    [evento]: riga numero 6, dopo il FROM, quindi è una tabella (o query) e nella riga numero 8, dopo GROUP BY dove si mettono i campi per il raggruppamento. Anche in questo caso [evento] per come è scritto qui, è sia una tabella sia un campo.
  • Re: Query

    Piu o meno ci sono...voglio solo vedere i nomi di tutti i clienti e se hanno associato a loro degli eventi con data e titolo.... ;'(
  • Re: Query

    Select c.nome, c.cognome, count(*), e.DataEvento, e.Titolo
    from cliente as c join evento as e
    on (c.IdCliente = e.IdEvento)
    group by e.idevento;
  • Re: Query

    mikemayster ha scritto:


    select c.nome, c.cognome, count(*), e.DataEvento, e.Titolo 
    from cliente as c join evento as e 
    on (c.IdCliente = e.IdEvento)
    group by e.idevento;
    Questa dà errori ma non il risultato che vuoi oppure proprio non funziona?

    mikemayster ha scritto:


    piu o meno ci sono...voglio solo vedere i nomi di tutti i clienti e se hanno associato a loro degli eventi con data e titolo.... ;'(
    allora serve un left join, con il join semplice trova solo i clienti CON eventi. Per fare questo, da interfaccia grafica devi modificare il tipo di relazione che collega le due tabelle. Da SQL, invece di join, left join.
    Scusa... ma lavori su Access? di suo dovrebbe mettere INNER JOIN, non solo JOIN.
  • Re: Query

    No lavoro su mysql workbench...cmq si apposto ho messo inner join e ora va....inserisco dei dati e ti dico se il risultato è quello che speravo
  • Re: Query

    mikemayster ha scritto:


    no lavoro su mysql workbench...
    Vabbè che qui siamo alle basi delle query in SQL ma insomma... questa è la sezione di Access (mi sembrava strano che dall'interfaccia grafica di Access si potessero fare così tanti "errori")

    mikemayster ha scritto:


    cmq si apposto ho messo inner join e ora va....inserisco dei dati e ti dico se il risultato è quello che speravo
    Comunque è il left join che serve.
  • Re: Query

    mikemayster ha scritto:


    voglio che mi faccia vedere tutti i cliente e se hanno associato a loro un evento o piu
    Se vuoi la query, certamente serve il LEFT join che ti permette di vedere TUTTI i Clienti, anche quelli che non hanno eventi associati.

    Io non vorrei andare fuori tema, ma non sottovalutare il fatto che la tabella Clienti, in visualizzazione foglio dati, ti permette di aprire (per ogni Cliente) tutti i suoi Eventi grazie al "foglio dati secondario". Sto parlando in Access.
Devi accedere o registrarti per scrivere nel forum
11 risposte