
Query orrenda...
Sarebbe opportuno che quando metti in relazioni più tabelle utilizzi i nomi di tabella o gli alias.
In questa query non si capisce quale campo appartiene a chi, e se ci fossero 2 campi con nome identico? sicuramente andrebbe in errore.
e se una tabella non ha alcun dato per quella chiave i dati vanno comunque selezionati o no?
Devi sapere che in SQL puoi relazionare le tabelle con
INNER JOIN mette in relazione le tabelle e tutte devono avere i dati per quella chiave
LEFT JOIN prende tutti dati della tabella di sinistra e solo quelli con chiave uguale dalla tabella di destra (quello che non ha corrispondenze rimane a NULL)
RIGHT JOIN come la precedente ma inversa
FULL OUTHER JOIN prende tutto di tutto delle tabelle (quello che non ha corrispondenze rimane a NULL)
CROSS JOIN relaziona le tabelle una riga a molte
Queste sono quelle di utilizzo più comuni.
Qundi una select la faresti tipo:
SELECT A.Campo AS Campo1
, B.Descrizione
, B.Campo AS Campo2
, NZ(C.Importo,0) AS Totale
FROM ( ( TABELLA1 A
INNER JOIN TABELLA2 B
ON A.Chiave = B.Chiave )
LEFT JOIN TABELLA3 C
ON C.Chiave = A.Chiave
AND C.SUBChiave = B.SUBChiave )
WHERE C.Chiave = 'abcd'
Da notare le parentesi necessarie in access
quindi la tua query io la riscriverei in questo modo:
SELECT S.nome_servizio
, S.tipo_servizio
, S.durata
, S.localita
, S.nome_ospedale
, S.data_servizio
, M.cognome_med
, M.nome_med
, M.specializzazione
, I.cognome_inserv
, I.nome_inserv
, I.cooperativa
FROM ( ( servizi S
INNER JOIN medici M
ON S.ID_Servizi = M.KS_Servizi )
INNER JOIN inservienti I
ON S.ID_Servizi = I.KS_Servi )
Ho messo gli INNER JOIN ma credo che forse sarebbe necessarie sostituirle con LEFT JOIN entrambe poichè magari qualche servizio non ha medico o inserivente associato o entrambi.
Vincenzo
Programmatore sbilenco