Query (per me) complessa

venerdì 05 dicembre 2008 - 22.33

alexmed Profilo | Guru

Ciao
Due tabelle
1. Tabella IMPIANTI
id_Impianto | id_Tipologia | [Codice Impianto] | id_Comune

2. Tabella COMUNI
id_Comune | id_Provincia | id_Regione | Comune

Se voglio estrapolare gli impianti che ho in un comune eseguo questa query

SELECT id_Impianto, id_Tipologia, [Codice Impianto], id_Comune
FROM IMPIANTO
WHERE (id_Comune = (SELECT id_Comuni FROM COMUNI WHERE (Comune = @Comune)))

Quindi scrivo TORINO e mi trova tutti gli impianti di Torino.

Ma se volessi sapere gli impianti presenti in una Provincia o in una Regione, così come ho strutturato le tabelle è possibile?

Grazie
Alessandro

Stroke Profilo | Junior Member

Solo se fai un joint con la tabella che contiene le prov.

ciao
Furio
http://www.opsi.ws

lbenaglia Profilo | Guru

>1. Tabella IMPIANTI
>id_Impianto | id_Tipologia | [Codice Impianto] | id_Comune
>
>2. Tabella COMUNI
>id_Comune | id_Provincia | id_Regione | Comune

Ciao Alessandro,

Io ti proporrei di normalizzare la struttura del db creando una relazione 1-a-molti tra le tabelle REGIONI e PROVINCE, una relazione 1-a-molti tra PROVINCE e COMUNI ed una relazione 1-a-molti tra COMUNI e IMPIANTI.
Con semplici JOIN riuscirai ad ottenere il risultato che cerchi.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Rob Profilo | Newbie

Ciao,
se, come presumo nella tabella comuni, id_comuni è primary key, potresti provare in questo modo:

SELECT
I.id_Impianto,
I.id_Tipologia,
I.[Codice Impianto],
I.id_Comune
FROM
IMPIANTO as I,
COMUNI as C
WHERE
I.id_Comune = C.id_Comune
AND C.id_Regione = @Regione

alexmed Profilo | Guru

Ciao
Ho fatto un pò di prove secondo le vostre indicazioni e il risultato è questo

---------- SELEZIONE DEGLI IMPIANTI PER PROVINCIA SELECT IMPIANTO.[Codice Impianto], COMUNI.Comune FROM COMUNI INNER JOIN IMPIANTO ON COMUNI.id_Comuni = IMPIANTO.id_Comune WHERE (COMUNI.id_Provincia = (SELECT id_Provincia FROM PROVINCE AS PROVINCIA WHERE (Provincia = @Provincia))) ORDER BY COMUNI.Comune ---------- SELEZIONE DEGLI IMPIANTI PER REGIONE SELECT IMPIANTO.[Codice Impianto], COMUNI.Comune FROM COMUNI INNER JOIN IMPIANTO ON COMUNI.id_Comuni = IMPIANTO.id_Comune WHERE (COMUNI.id_Regione = (SELECT id_Regione FROM REGIONI AS REGIONE WHERE (Regione = @Regione))) ORDER BY COMUNI.Comune

Ho fatto dei test su una tabella con una decina di impianti sparsi per l'Italia e sembra funzionare

Cosa ne dite?

Ciao e grazie a tutti voi

Stroke Profilo | Junior Member

Funziona anche come le hai scritte, ma così sono più corrette
SELECT IMPIANTO.[Codice Impianto], COMUNI.Comune
FROM COMUNI INNER JOIN
IMPIANTO ON COMUNI.id_Comuni = IMPIANTO.id_Comune
Join PROVINCE on Comuni.id_provincia = PROVINCE.id_provincia
WHERE (Provincia = @Provincia)
ORDER BY COMUNI.Comune


SELECT IMPIANTO.[Codice Impianto], COMUNI.Comune
FROM COMUNI INNER JOIN
IMPIANTO ON COMUNI.id_Comuni = IMPIANTO.id_Comune
Join REGIONI on Comuni.id_regione = REGIONI .id_regione WHERE (Provincia = @Provincia)
ORDER BY COMUNI.Comune

ciao
Furio
http://www.opsi.ws

alexmed Profilo | Guru

Perfetto Grazie.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5