Sql Server Estrazione dati anche non presenti

lunedì 01 marzo 2010 - 11.26

nandonando Profilo | Senior Member

Ho tre tabelle
tabella1 campi :id_Tabella 1 ; Nome
tabella2 campi :id_Tabella 2 ; Tipo
tabella3 campi :id_Tabella 1 ; id_Tabella 2; testo
praticamente la terza è l'incrocio delle due tabelle con un dato legato è possibile con un'unica query estrarre i dati e nel momento in cui nella terza tabella quel valore non esiste comunque tirare fuori tipo nullo?
Grazie
http://www.gustoroma.it

alx_81 Profilo | Guru

ciao

>praticamente la terza è l'incrocio delle due tabelle con un dato
>legato è possibile con un'unica query estrarre i dati e nel momento
>in cui nella terza tabella quel valore non esiste comunque tirare
>fuori tipo nullo?
indicativamente basta usare delle outer join. Ma dovresti essere un po' più preciso nel presentare il problema.
Potresti postare qualche dato di tutte le tabelle e quello che vuoi ottenere?

>Grazie
di nulla!

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

nandonando Profilo | Senior Member

Vi scrivo i cicli annidati che ho fatto ma non sò perchè è molro lento eppure sono circa 500 giri che fa in totale:
Dim strsqlISPETTORI As String = "select ID from tblIspettori"
Dim sqlTblISPETTORI As New SqlCommand(strsqlISPETTORI, cn)
Try

cn.Open()
Dim rdrISPETTORI As SqlDataReader = sqlTblISPETTORI.ExecuteReader(CommandBehavior.KeyInfo)
While rdrISPETTORI.Read()
''''''''''''''''''''''''''''
Dim strsqlTIPIVERIFICHE As String = "select ID from tblVERIFICHE_TIPI"
Dim sqlTblTIPIVERIFICHE As New SqlCommand(strsqlTIPIVERIFICHE, cn2)
Try

cn2.Open()
Dim rdrTIPIVERIFICHE As SqlDataReader = sqlTblTIPIVERIFICHE.ExecuteReader(CommandBehavior.KeyInfo)
While rdrTIPIVERIFICHE.Read()

'''''''''''''''''''
Dim strsqlPAGAMENTOISPETTORI As String = "SELECT dbo.TB_ISPETTORI_PAGAMENTO.*, ID_ISPETTORE, ID_VERIFICA_TIPO FROM dbo.TB_ISPETTORI_PAGAMENTO WHERE (ID_ISPETTORE = " & rdrISPETTORI.Item("ID") & " ) AND (ID_VERIFICA_TIPO = " & rdrTIPIVERIFICHE.Item("ID") & ")"
Dim sqlTblPAGAMENTOISPETTORI As New SqlCommand(strsqlPAGAMENTOISPETTORI, cn3)
Try
cn3.Open()
Dim rdrPAGAMENTOISPETTORI As SqlDataReader = sqlTblPAGAMENTOISPETTORI.ExecuteReader(CommandBehavior.KeyInfo)
If rdrPAGAMENTOISPETTORI.Read() Then
'M = M + 1
Else
M = M + 1
End If
cn3.Close()
Catch ex As Exception
cn3.Close()
End Try
'''''''''''''''''
End While
cn2.Close()
Catch ex As Exception
cn2.Close()
End Try

'''''''''''''''''''''''''
End While
cn.Close()
Catch ex As Exception
cn.Close()
End Try
http://www.gustoroma.it

alx_81 Profilo | Guru

>Vi scrivo i cicli annidati che ho fatto ma non sò perchè è molro
>lento eppure sono circa 500 giri che fa in totale:
ma come mai per fare l'ultima select fai tutti questi cicli?
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

nandonando Profilo | Senior Member

In che senso?
intendi in if else end if?
se è cosi è perchè ad ognuno corrisponde un valore
altrimenti noti qualche errore logico?
http://www.gustoroma.it

alx_81 Profilo | Guru

>In che senso?
>intendi in if else end if?
no, intendo che questi tre cicli potrebbero essere una sola query.
Volevo capire se hai la necessità di fare cicli e quindi cursori.. Insomma, qual è la situazione reale?
magari risolvi tutto con una query.


--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

nandonando Profilo | Senior Member

Un unica query magari!
E' quello che cerco di fare ci sono quasi ma in un modo un pò illogico
http://www.gustoroma.it

alx_81 Profilo | Guru

ti dicevo..
Potresti postare qualche dato di tutte le tabelle e quello che vuoi ottenere?
sarebbe ottimo avere un po' di dati di ognuna delle tre tabelle, e poi un esempio di output che ti serve.

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

nandonando Profilo | Senior Member


321x195 20Kb

321x194 21Kb

321x384 36Kb


Allora sono tre tabelle la prima ispettori seconda tipi verifiche e la terza è per il pagamento.
Ovviamente faccio una semplice query per tirare fuori dalla tabella pagamento ispettori i dati che si incociano tra verifiche tipi e ispettori ma me servirebbe che la query anche se non c'è un risultato (esempio quella determinato parametro per esempio non eè stato acnora caricato) comunque mi desse un risultato magari anche null.
Non sò se sono stato abbastanza chiaro.

http://www.gustoroma.it

Sono riuscito a creare solo 2 query ma è sempre lento gira circa 500 volte in 6-7 secondi è normale secondo voi?
Ho uso male i datareader?
O non devo proprio usarli.
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5