PDA

View Full Version : query con access2000: errore progettazione?


Giupin
25-05-2005, 11:52
Ho queste tabelle così relazionate:

Cittadini ############# Nascite ###################
------------- ######## ---------- ##################
| idcittadino..|####|--- 1 | idnascita |#################
| nome.........|####|####|data.......|#################
| cognome....|####|####|idcomune |oo---|#######Comuni
| idnascita....|1----- ####----------- ###|#####-------------
| idresidenza..|oo-----###############|------1| idcomune |
| flaganag.....| ####| ####################| |
-------------- ####|################|----1| descrizione |
##############|#### Residenza ####| -------------
##############|##### -----------###|
##############----1 |idresidenza |###|
################## |idcomune |1---|
################## -------------

cittadini - nascite 1 a 1 tramite idnascita
cittadini - residenza molti a uno tramite idresidenza
nascite - comuni molti a uno tramite idcomune
residenza - comuni molti a uno tramite idcomune

vorrei ottenere per ogni cittadino nato ad una certa data sia la descrizione del comune di nascita che quello di residenza
alla data prescelta mi corrispondono 4 cittadini ma la query che faccio mi restituisce solo 2 record
la query è questa:

SELECT Cittadini.nome, Cittadini.cognome, Nascite.datanascita,
Comuni.descrizione AS comnas, Comuni.descrizione AS comres
FROM Residenza INNER JOIN (Comuni
INNER JOIN (Cittadini
INNER JOIN Nascite ON Cittadini.idnascita = Nascite.idnascita)
ON Comuni.idcomune = Nascite.idcomune)
ON (Residenza.idcomune = Comuni.idcomune) AND (Residenza.idresidenza = Cittadini.idresidenza)
WHERE (((Nascite.datanascita)=#1/1/1900#) AND ((Cittadini.flaganag)=True));

è sbagliata la query o il db è progettato male?
grazie

valse
25-05-2005, 16:39
...secondo me è sbagliato il database...
ti consiglio 2 tabelle:

- tblCittadini: idCittadino, Nome, dataNascita, idComuneNascita, idComuneResidenza
- tblComuni: idComune, Nome

in modo che tu puoi avere il cittadino in base a tutto quello che tiserve... ed inoltre mi sembra un pò uno spreco avere 2 tabelle di comuni?!

La query che hai chiesto risulterebbe così:
"SELECT tblCittadini.Nome, tblComuni.Nome AS ComuneNascita, tblComuni1.Nome AS ComuneResidenza FROM tblCittadini, tblComuni, tblComuni AS tblComuni1 WHERE tblCittadini.idComuneNascita = tblComuni.idComune AND tblCittadini.idComuneNascita = tblComuni1.idComune AND tblCittadini.dataNascita=#25/05/2005#"

hola
valse

Giupin
27-05-2005, 11:17
si però in questo modo come ricavo i dati di nascita e di residenza?
quindi mi occorrono altre due tabelle per questi dati in cui ognuna abbia l'idcomune relativo..

comunque ho risolto prendendo spunto dalla tua query quando scrivi:
[QUOTE=..tblComuni.Nome AS ComuneNascita, tblComuni1.Nome AS ComuneResidenza FROM... [/QUOTE]
mentre io mettevo:
"Comuni.descrizione AS comnas, Comuni.descrizione AS comres "

inoltre ho legato tblcomuni solo alla nascita e tblcomuni1 solo alla residenza..

non so se è giusto fare così... ma funziona
grazie