Newsgroup: it.comp.appl.access
Titolo: MySQL

Ciao a tutti non riesco a risolvere questa query, la traccia è la seguente:
Si scriva una query per confrontare i costi alberghieri totali dei ricoveri dell’anno scorso con quelli di due anni fa.
SELECT year(date())-2 as anno,sum( (r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo, count(*) as num_ricoveri
FROM ricoveri r, reparti rep
WHERE year(r.data_uscita)=(year(date())-2) AND r.reparto=rep.codice
UNION
SELECT year(date())-1 as anno,sum( (r.data_uscita-r.data_ingresso)*rep.costo_giorno), count(*) as costo
FROM ricoveri r, reparti rep
WHERE year(r.data_uscita)=(year(date())-1) AND r.reparto=rep.codice
 
questa sarebbe la soluzione proposta, ma inserita su mySQL risulta errata.
Grazie a tutti.

Alessandra Marino brought next idea :

Ti funziona almeno una delle due query (quella dell'anno scorso
o quella di due anni fa?)
 
Io direi di no.
 
Bruno


ciao scusami ma la soluzione proposta non lho scritta io, sapresti dirmi perché risulta errata?
Grazie.

Alessandra Marino submitted this idea :

Non mi risulta errata: ho l'impressione debba esserlo.
Ci sono molti As (il che significa combinazioni/operazioni
su campi a formare campi virtuali), degli asterischi che
a volte indicato qualunque elemento come in Count(*), altre
volte il segno algebrico di prodotto ome in
sum( (r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo...
 
Io conosco Access ma non MySql, quindi di quest'ultimo non
so giudicare ortografia e sintassi.
Non puoi mettere online quelle quattro tabelle striminzite?
 
Bruno

 
 
conosco un po' il SQL di MS, non mi piacciono le due tabelle nei FROM, 
non è specificato in base a quali campi sono collegate (con un JOIN)
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

 
 
FROM ricoveri r
INNER JOIN reparti rep on rep.codice=r.reparto


 
 
in mysql se rep.codice e r.reparto sono lo stesso valore identificativo 
puoi fare a meno del join
 
basta metterli in where come nella soluzione descritta.
BFS
 
 
 
 


che errore ti da?
hai costruito le due tabelle ricoveri e reparti con i campi oggetto 
della query?
inoltre in mysql occhio al maiuscolo/minuscolo
 
BFS

 basta metterli in where come nella soluzione descritta.
 
questo "join invisibile" di MySQL presuppone che entrambi i campi siano 
indicizzati, chiavi univoche o altro?


 
 
 
indice no
univoco neppure
 
esempio
hai una tabella companies con un idcliente
una tabella user con un idcliente  (tabella che contiene tutti i 
dipendenti delle aziende)
 
in sqlserver/access faresti
 
select ....from companies inner join user on 
companies.idcliente=users.idcliente
 
in mysql puoi fare cosi
 
SELECT ... FROM users a , companies b where a.idCliente=b.idCliente
 
 
BFS
 


Ciao, purtroppo ho un datebase che è privato, poichè è stato creato dall'insegnante del mio corso, comunque nelle tabelle sono presenti i seguenti dati:
RICOVERI: codice fiscale paziente, codice fiscale medico, data ingresso, data uscita, drg, id ricovero (chiave della tabella), numero reparto, diagnosi ricovero.
REPARTI: numero reparto(chiave della tabella), nome reparto, costo giornaliero, numero letti.


ciao, ho visto su internet che l'insegnante del mio corso utilizza il vecchio linguaggio di my sql, e nel mio caso per collegare la from con le join nella where usiamo l'alias che diamo nella from--> from ricoveri R, reparti REP  where R.numero_reparto=REP.numero_reparto


non ho mai visto durante il corso l'inner join, penso sia il nuovo linguaggio per my sql?


 mi dice che ho un errore nella compilazione del linguaggio, ma non specifica dove, penso sia nella date(), perchè da sempre errore con quella. Per il maiuscolo/minuscolo da problemi solo se nella from il nome delle tabelle è in maiuscolo. grazie a tutti.


inner join left join e right join son sempre esistiti a mia memoria in mysql
 
BFS


date() non esiste in mysql
se il tuo intento è ottenere l'anno del giorno corrente usa
 
year(current_date())
 
 
BFS

Il 09/02/2024 18:31, Alessandra Marino ha scritto:

ma per chiarezza
 
il professore chiede:
Si scriva una query per confrontare i costi alberghieri totali dei 
ricoveri dell’anno scorso con quelli di due anni fa.
 
 
e tu hai buttato giu questo?
 
SELECT year(date())-2 as anno,sum( 
(r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo, count(*) as 
num_ricoveri
FROM ricoveri r, reparti rep
WHERE year(r.data_uscita)=(year(date())-2) AND r.reparto=rep.codice
UNION
SELECT year(date())-1 as anno,sum( 
(r.data_uscita-r.data_ingresso)*rep.costo_giorno), count(*) as costo
FROM ricoveri r, reparti rep
WHERE year(r.data_uscita)=(year(date())-1) AND r.reparto=rep.codice
 
o la query di unione fa parte della traccia del professore?
 
 
 
BFS
 
 
 
 
 
 

 SELECT ... FROM users a , companies b where a.idCliente=b.idCliente
 
ok, chiaro, personalmente preferisco che la relazione di join sia 
espressa nell'elenco delle tabelle piuttosto che nella condizione 
where, in modo da averla sotto il naso subito per eventuali controlli
 
il where lo lascerei solo per impostare ulteriori condizioni


 
 
 
concordo
BFS

 il where lo lascerei solo per impostare ulteriori condizioni
 
Ma, giusto una domanda: sto c.... di MySql non ce l'ha
una griglia QBE (Query by Example) come quella di Access?
 
Bruno

 
 
sì, gli alias li uso praticamente sempre per non portarmi dietro il 
nome delle tabelle ogni volta che mi serve un campo
le persona con cui lavoro usano il metodo "alfabetico" usando gli alias 
a, b, c, d, eccetera oppure quello progrressivo t0, t1, t2, t3 eccetera
personalmente preferisco quello alfabetico ma con un certo riferimento 
alla tabella stessa
 
p.e. in SAP Business One
 
select *
from ORDR h
inner join RDR1 r on r.DocEntry = h.DocEntry
inner join OCRD bp on bp.CardCode = h.CardCode
inner join OITM p on p.ItemCode = r.Itemcode
 
dove ORDR sono le testate degli ordini (h-eaders), RDR1 sono le righe 
(r-ows), OCRD è l'anagrafica dei clienti (b-usiness p-artners) e OITM è 
l'anagrafica degli articoli (p-roducts)
 
nella query i nomi dei campi preceduti da h, r, bp o p mi fanno capire 
meglio dove sto andando a prendere il valore



salve, non ho mai usato access, quindi non saprei. Grazie

Alessandra Marino formulated the question :

La mia domanda era pleonastica.
È evidente che MySQL una griglia QBE non ce l'ha...
diversamente sarebbe stata la cosa che per prima
avresti imparato ad usare.
Io non ho mai fatto una Query a mano, never!
nemmeno le più facili.
 
Per chi vuole programmare la ritengo la cosa
migliore di tutto l'MS Office.
 
Bruno