guylmaster
16-02-2011, 20:32
Salve a tutti,
ho provato a fare la seguente query ma mi dice che faccio un uso di union e order by:
Select *
from giornosettimana
order by giornosett
union
select giornosett, coalesce(0)
from volo
where giornosett != all(select giornosett from giornosettimana)
order by giornosett;
Come faccio a dirgli, in SQl-2 standard (non mysql o altro) di ordinarmi il risultato dell'intera unione per giornosett crescente?
Inoltre vorrei chiedervi se la query si può scrivere in maniera più pulita, il database è formato dalle seguenti tabelle:
aereoporto(citta , nazione, numpiste);
volo(idvolo, giornosett , cittapart, oraprt, cittadest, oradest, tipoaereo);
aereo(tipoaereo , numpasseggeri, qtamerci);
Ora l'esercizio chiede:
Per ciascun giorno della settimana, il massimo numero di passeggeri in aprtenza da un qualsiasi aereoporto italiano ed in arrivo a milano
La query di sopra, viene applicata a giornosett che è la seguente visita:
create view giornosettimana as
select v.giornosett, sum(a.numpasseggeri)
from volo v join (aereoporto ar, aereo a)
on v.tipoaereo = a.tipoaereo and v.cittapart = ar.citta
where ar.nazione = 'italia' and v.cittadest = 'milano'
group by v.giornosett;
Mi chiedevo quindi, oltre che come risolvere il problema della order by, come poter snellire la query, in particolar modo se conoscete un modo abbastanza leggibile (ovvero senza creare troppe query annidate) per fare tutto in un unica query senza creare la visita.
A me altre idee non sono venute e creare la visita è l'unico modo che mi è venuto per rendere più facile la query, però non vorrei che sono io che l'ho creata in maneira sbagliata. Tra l'altro c'è quel problema che non riesco ad applicare l'ordinamento sull'unione.
Vi ringrazio in anticipo,
Neptune.
ho provato a fare la seguente query ma mi dice che faccio un uso di union e order by:
Select *
from giornosettimana
order by giornosett
union
select giornosett, coalesce(0)
from volo
where giornosett != all(select giornosett from giornosettimana)
order by giornosett;
Come faccio a dirgli, in SQl-2 standard (non mysql o altro) di ordinarmi il risultato dell'intera unione per giornosett crescente?
Inoltre vorrei chiedervi se la query si può scrivere in maniera più pulita, il database è formato dalle seguenti tabelle:
aereoporto(citta , nazione, numpiste);
volo(idvolo, giornosett , cittapart, oraprt, cittadest, oradest, tipoaereo);
aereo(tipoaereo , numpasseggeri, qtamerci);
Ora l'esercizio chiede:
Per ciascun giorno della settimana, il massimo numero di passeggeri in aprtenza da un qualsiasi aereoporto italiano ed in arrivo a milano
La query di sopra, viene applicata a giornosett che è la seguente visita:
create view giornosettimana as
select v.giornosett, sum(a.numpasseggeri)
from volo v join (aereoporto ar, aereo a)
on v.tipoaereo = a.tipoaereo and v.cittapart = ar.citta
where ar.nazione = 'italia' and v.cittadest = 'milano'
group by v.giornosett;
Mi chiedevo quindi, oltre che come risolvere il problema della order by, come poter snellire la query, in particolar modo se conoscete un modo abbastanza leggibile (ovvero senza creare troppe query annidate) per fare tutto in un unica query senza creare la visita.
A me altre idee non sono venute e creare la visita è l'unico modo che mi è venuto per rendere più facile la query, però non vorrei che sono io che l'ho creata in maneira sbagliata. Tra l'altro c'è quel problema che non riesco ad applicare l'ordinamento sull'unione.
Vi ringrazio in anticipo,
Neptune.