Select (sql server)

lunedì 05 marzo 2007 - 10.39

ANNA79 Profilo | Junior Member

Salve,

ho una select con la relazione tra piu tabelle, una di queste relazioni mi da un problema(tabella Utente con la tabella sedeImmobile) poichè mettendo in relazione il campo Utente.Sede con il campo SedeImmobile.Id ovviamente mi prende tutti i campi che hanno in relazione i due codici delle due tabelle, solo che nella tabella Utente, io dovrei anche prendere alcuni record che hanno il campo sede a null.Come posso prendere tutti i record compresi quelli con campi valorizzati a null senza dover ricorrere al codice?
grazie.


QUesta è la select che faccio




SELECT DISTINCT Utente.id, Utente.cognome, Utente.nome, Utente.noteRicerca, SedeImmobile.sedeImmobile, Sigla.descrizione, Numero.numero
FROM GruppoAzienda INNER JOIN
Azienda ON GruppoAzienda.id = Azienda.gruppoAzienda INNER JOIN
Utente INNER JOIN
SedeImmobile ON Utente.sedeImmobile = SedeImmobile.id INNER JOIN
Sigla ON Utente.sigla = Sigla.id INNER JOIN
RelUtenteNumero ON Utente.id = RelUtenteNumero.utente INNER JOIN
Numero ON RelUtenteNumero.numero = Numero.id ON Azienda.id = Utente.azienda
WHERE (Utente.dataCancellazione IS NULL) AND (Utente.codiceVisualizzazione IN (1, 2, 3))

bluland Profilo | Guru

>Salve,
>
>ho una select con la relazione tra piu tabelle, una di queste
>relazioni mi da un problema(tabella Utente con la tabella sedeImmobile)
>poichè mettendo in relazione il campo Utente.Sede con il campo
>SedeImmobile.Id ovviamente mi prende tutti i campi che hanno
>in relazione i due codici delle due tabelle, solo che nella tabella
>Utente, io dovrei anche prendere alcuni record che hanno il campo
>sede a null.Come posso prendere tutti i record compresi quelli
>con campi valorizzati a null senza dover ricorrere al codice?
>grazie.
>
>
>QUesta è la select che faccio
>
>
>
>
>SELECT DISTINCT Utente.id, Utente.cognome, Utente.nome, Utente.noteRicerca,
>SedeImmobile.sedeImmobile, Sigla.descrizione, Numero.numero
>FROM GruppoAzienda INNER JOIN
>Azienda ON GruppoAzienda.id = Azienda.gruppoAzienda INNER JOIN
> Utente INNER JOIN
>SedeImmobile ON Utente.sedeImmobile = SedeImmobile.id INNER JOIN
>Sigla ON Utente.sigla = Sigla.id INNER JOIN
>RelUtenteNumero ON Utente.id = RelUtenteNumero.utente INNER JOIN
>Numero ON RelUtenteNumero.numero = Numero.id ON Azienda.id =
>Utente.azienda
>WHERE (Utente.dataCancellazione IS NULL) AND (Utente.codiceVisualizzazione
>IN (1, 2, 3))

Ciao potresti inviare la struttura della tabella con qualche insert, e dire che db usi

saluti

--------------------
Vincenzo PESANTE

alx_81 Profilo | Guru

>Salve,
Ciao!
>
>ho una select con la relazione tra piu tabelle, una di queste
>relazioni mi da un problema(tabella Utente con la tabella sedeImmobile)
>poichè mettendo in relazione il campo Utente.Sede con il campo
>SedeImmobile.Id ovviamente mi prende tutti i campi che hanno
>in relazione i due codici delle due tabelle, solo che nella tabella
>Utente, io dovrei anche prendere alcuni record che hanno il campo
>sede a null.Come posso prendere tutti i record compresi quelli
>con campi valorizzati a null senza dover ricorrere al codice?
>grazie.
>
>
>QUesta è la select che faccio
>
>
>
>
>SELECT DISTINCT Utente.id, Utente.cognome, Utente.nome, Utente.noteRicerca,
>SedeImmobile.sedeImmobile, Sigla.descrizione, Numero.numero
>FROM GruppoAzienda INNER JOIN
>Azienda ON GruppoAzienda.id = Azienda.gruppoAzienda INNER JOIN
> Utente INNER JOIN
>SedeImmobile ON Utente.sedeImmobile = SedeImmobile.id INNER JOIN
>Sigla ON Utente.sigla = Sigla.id INNER JOIN
>RelUtenteNumero ON Utente.id = RelUtenteNumero.utente INNER JOIN
>Numero ON RelUtenteNumero.numero = Numero.id ON Azienda.id =
>Utente.azienda
>WHERE (Utente.dataCancellazione IS NULL) AND (Utente.codiceVisualizzazione
>IN (1, 2, 3))
Basta utilizzare la LEFT OUTER JOIN, che ti ricava tutti i valori della tabella "A SINISTRA" e quelli che si legano della DESTRA.
Quindi riscrivi la select in questo modo:

SELECT DISTINCT Utente.id, Utente.cognome, Utente.nome, Utente.noteRicerca, SedeImmobile.sedeImmobile, Sigla.descrizione, Numero.numero FROM GruppoAzienda INNER JOIN Azienda ON GruppoAzienda.id = Azienda.gruppoAzienda LEFT OUTER JOIN Utente ON Azienda.id = Utente.azienda INNER JOIN SedeImmobile ON Utente.sedeImmobile = SedeImmobile.id INNER JOIN Sigla ON Utente.sigla = Sigla.id INNER JOIN RelUtenteNumero ON Utente.id = RelUtenteNumero.utente INNER JOIN Numero ON RelUtenteNumero.numero = Numero.id WHERE (Utente.dataCancellazione IS NULL) AND (Utente.codiceVisualizzazione IN (1, 2, 3))
dovrebbe bastarti, anche se non riesco a fare prove senza i tuoi dati..
facci sapere!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ANNA79 Profilo | Junior Member

purtroppo scrivere qui la struttura delle tabelle che mi interessano richiederebbe davvero troppo tempo poichè sono abbastanza grandi comunque io utilizzo un sql server Enterprise Manager
ma non ho capito se io imposto una LEFT OUTER JOIN che mi ricava tutti i valori della sinistra mi prende solo i campi null? cioè non so a cosa mi possa servire prendere dei dati da destra o da sinistra visto che i dati che dovrei ricavare si trovano tutti ugualmente disposti. Io devo prendere tutti i dati che hanno valorizzato il campo sediimmobile a null e valorizzati con codice, solo che quando vado a fare la relazione tra la tabella Utente e la tabella SediImmobile mettendo in relazione i due campi Utente.sedeImmobile= SedeImmobile.Id, non trovando un corrispondente id nella tabella SedeImmobile a null , mi prende solo tutti i campi che hanno i codici in relazione tranne i campi impostati a null.
Purtroppo è difficile spiegarsi qui per post faccio un esempio così magari mi riesco a spiegare meglio


Tabella Utente
SediImmobile

15666
88888
44444
66666
null

tabella SediImmobile

id SedeImmobile
15666 Torino
88888 Milano
44444 Genova
66666 Napoli
88899 Roma




Con la select che ho fatto nel post precedente, oltre agli altri campi e le altre join mi ricava questi record

Torino
Milano
Genova
Napoli
Roma

tutte le descrizioni dei campi messi in relazione tranne il record della tabella utente impostanto a null poichè non ha alcuna relazione nella tabella SedeImmobile,
io invece oltre al risultato di questa relazione devo prendere anche il record della tabella Utente che ha come campo SediImmobile Null


grazie per l'interesse
Anna

lbenaglia Profilo | Guru

>Con la select che ho fatto nel post precedente, oltre agli altri
>campi e le altre join mi ricava questi record
>
>Torino
>Milano
>Genova
>Napoli
>Roma
>
>tutte le descrizioni dei campi messi in relazione tranne il record
>della tabella utente impostanto a null poichè non ha alcuna relazione
>nella tabella SedeImmobile,
>io invece oltre al risultato di questa relazione devo prendere
>anche il record della tabella Utente che ha come campo SediImmobile
>Null

Ciao Anna,

come fai a dire che è proprio "Roma" la sede corrispondente all'utente avente SedeImmobileID = NULL?

>grazie per l'interesse
Prego.

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

bluland Profilo | Guru

>purtroppo scrivere qui la struttura delle tabelle che mi interessano
>richiederebbe davvero troppo tempo poichè sono abbastanza grandi

basta che da query analyzer digiti col destro del mouse sulle tabelle interessate e scegli create, in tal modo ti viene visualizzato lo script per ricreare le tabelle, cosi le possiamo ricreare anche noi per capire meglio, e poi magari ci metti qualche insert proprio con l'esempio che ti serve.


>comunque io utilizzo un sql server Enterprise Manager
>ma non ho capito se io imposto una LEFT OUTER JOIN che mi ricava
>tutti i valori della sinistra mi prende solo i campi null? cioè
>non so a cosa mi possa servire prendere dei dati da destra o
>da sinistra visto che i dati che dovrei ricavare si trovano tutti
>ugualmente disposti. Io devo prendere tutti i dati che hanno
>valorizzato il campo sediimmobile a null e valorizzati con codice,
>solo che quando vado a fare la relazione tra la tabella Utente
>e la tabella SediImmobile mettendo in relazione i due campi
>Utente.sedeImmobile= SedeImmobile.Id, non trovando un corrispondente
>id nella tabella SedeImmobile a null , mi prende solo tutti
>i campi che hanno i codici in relazione tranne i campi impostati
>a null.
>Purtroppo è difficile spiegarsi qui per post faccio un esempio
>così magari mi riesco a spiegare meglio
>
>
> Tabella Utente
> SediImmobile
>
> 15666
> 88888
> 44444
> 66666
> null
>
>tabella SediImmobile
>
>id SedeImmobile
>15666 Torino
>88888 Milano
>44444 Genova
>66666 Napoli
>88899 Roma

scusa ma come dici tu nella tabella SediImmobile ci dovrebbero essere dei record del tipo

id SedeImmobile

null Napoli
null Asti

ho capito bene?


--------------------
Vincenzo PESANTE
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