Join al posto di exec

venerdì 07 dicembre 2012 - 15.17
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  .NET 3.0  |  Windows XP  |  Visual Studio 2008  |  Visual Studio 2005  |  SQL Server 2008 R2  |  SQL Server 2008  |  SQL Server 2005  |  MySQL 4.1  |  Office 2007  |  Internet Explorer 6.0  |  Chrome  |  Opera  |  Firefox  |  Javascript  |  VBScript  |  Crystal Reports 10.0  |  SQL Reporting Services

memmo77 Profilo | Expert

Salve a tutti, mi trovo nella situazione di scrivere una join "dinamica" non eseguendo exec di stringhe se possibile.
Da una tabella di partenza di questo tipo:

T_CONDIZIONI
ID_CONDIZIONE;CODICE;VALORE
941;350;01
941;363;303

In sostanza questa, risulterebbe la condizione da eseguire (prendetela per buona senza che vi dica il perchè mi usciva così prima :D):
([350] = '01') AND ([363] = '303')

Ora, dovendomi agganciare a questa tabella che contiene solo i dati presenti:
T_DATI
ID_CONDIZIONE;CODICE;VALORE; IMPORTO
941;350;01;100
941;350;01;200
941;350;01;300

Scrivendo:
SELECT
*
FROM T_DATI AS DATI
INNER JOIN T_CONDIZIONI AS DIZ_C ON
DIZ_C.ID_CONDIZIONE = DATI.FK_ID_CONDIZIONE
AND DIZ_C.CODICE_CAMPO = DATI.COD_CAMPO
AND DIZ_C.VALORE = DATI.VALORE

I valori presenti nella tabella T_DATI vengono presi:
941;350;01;100
941;350;01;200
941;350;01;300

Mentre in realtà non dovrebbero. Non so se mi sono spiegato, spero tanto di si, come posso risolvere? Grazie

micto27 Profilo | Senior Member

>T_CONDIZIONI
>ID_CONDIZIONE;CODICE;VALORE
>941;350;01
>941;363;303
>
>Ora, dovendomi agganciare a questa tabella che contiene solo
>i dati presenti:
>T_DATI
>ID_CONDIZIONE;CODICE;VALORE; IMPORTO
>941;350;01;100
>941;350;01;200
>941;350;01;300
>
>Scrivendo:
>SELECT
> *
>FROM T_DATI AS DATI
> INNER JOIN T_CONDIZIONI AS DIZ_C ON
> DIZ_C.ID_CONDIZIONE = DATI.FK_ID_CONDIZIONE
> AND DIZ_C.CODICE_CAMPO = DATI.COD_CAMPO
> AND DIZ_C.VALORE = DATI.VALORE
>
>I valori presenti nella tabella T_DATI vengono presi:
>941;350;01;100
>941;350;01;200
>941;350;01;300
>
>Mentre in realtà non dovrebbero.

Ciao,

perchè non dovrebbero?
La prima riga di T_CONDIZIONI (941;350;01) lega perfettamente con le 3 righe di esempio della T_DATI
e quindi la INNER JOIN le lega tutte e 3.

Quale è il risultato che volevi ottenere?

Michele

memmo77 Profilo | Expert

La condizione dovrebbe essere formata da entrambi i record:

941;350;01
941;363;303

Ovviamente come dici te, la prima lega, la seconda no, e il risultato dovrebbe escludere i record. Come scrivevo sopra la condizione dovrebbe risultre come questa:
([350] = '01') AND ([363] = '303')
E quindi escludere la selezione, invece, come hai ben notato, la prima lega e tira fuori i record.

micto27 Profilo | Senior Member

La JOIN ha fatto il suo lavoro correttamente...
e quindi serve procedere in modo diverso..

Non è però molto chiaro che risultato vorresti ottenere

Michele

HolidaySoft.it Profilo | Junior Member

Ma quando dici
([350] = '01') AND ([363] = '303')
cosa intendi?? è sql? è plsql? è tsql? è vba? credimi non lo riconosco in nessun linguaggio...

Se ti spieghi meglio possiamo darti una mano

ciao
Mik
A quick solution is a shortcut to troubleshooting
http://www.HolidaySoft.it
http://www.GarganoSapori.it
http://www.osteriaoristorante.it

memmo77 Profilo | Expert

Oddio scusatemi, ma credevo si capisse ... Quando scrivo:
([350] = '01') AND ([363] = '303')

Intendo la where:
Select * from ....
where
([350] = '01')
AND ([363] = '303')

Dove 350 e 363 sono campi della tabella.
Ma comunque non credo si possa ottenere quello che mi serve, sto cercando di risolvere diversamente, ma se capite cosa intendo e potete postare una soluzione, ve ne sarei davvero grato.
Ciao
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