Problema con una query

domenica 12 settembre 2010 - 18.55
Tag Elenco Tags  SQL Server Express

zseven Profilo | Senior Member

Ciao ragazzi,
cerco di spiegare al meglio il problema della mia query.
Dunque la query iniziale e funzionante è tra due tabelle:
tab_tree
tab_protocolli
la tabella tab_protocolli ha due campi numerici
id_mittente
id_destinatario
che riprendono il valore della chiave di tab_tree.

Con questa query infatti riesco a visualizzare tutti i protocolli mostrando chi è il mittente e chi il destinatario:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Adesso entra in gioco una nuova tabella
tab_associa
che ha solo due campi numerici
id_tree
id_protocollo
In questa tabella indico se un determinato protocollo è associato ad una determinata cartella.
Il mio problema è perciò riuscire a mostrare tutti i protocolli associati a quella cartella attraverso i dati che si recuperano dalla tabella tab_associati.

Ho provato con una query di questo tipo, ma non riesco a filtrare correttamente i risultati:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
In pratica vorrei visualizzare, nel caso specifico, solo quei protocolli appartenenti alla cartella che ha l'id = 1 come nell'esempio qui sopra.

Ho dovuto questa tabella intermedia perchè ad ogni cartella possono essere associati più protocolli, e ogni protocolli può essere associato a più cartelle.
Spero di essermi spiegato bene, e che riusciate ad aiutarmi a risolvere il problema.
Grazie mille

lbenaglia Profilo | Guru

>cerco di spiegare al meglio il problema della mia query.

Ciao,

Posta i comandi di CREATE TABLE di tutte le tabelle con i relativi constraints (PK, FK, ecc.), alcune righe di prova per ogni tabella ed il result set finale che vorresti ottenere con quei dati.

>Grazie mille
Prego.

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

zseven Profilo | Senior Member

Ciao Lorenzo,
grazie per la risposta, purtroppo non saprei come fare quello che mi chiedi, provo a scriverti più precisamente la struttura delle tre tabelle ed il risultato che vorrei ottenere, spero tu riesca ugualmente ad aiutarmi.

tab_tree
ID_tree - Int - CHIAVE PRIMARIA
nome_tree - Nvarchar

tab_protocolli
ID_protocolli - Int - CHIAVE PRIMARIA
id_mittente - numeric
id_destinatario - numeric
oggetto_protocollo - Nvarchar

tab_associa
ID_associa - Int - CHIAVE PRIMARIA
id_tree - numeric
id_protocollo - numeric

Come ti dicevo questa query che ti scrivo di seguito mi funziona:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
e mi mostra il risultato come segue:
MITTENTE | DESTINATARIO | OGGETTO

mostrandomi tutti i protocolli presenti nella tabella tab_protocolli.

Adeso viene il problema.
Nella tabella tab_tree io ho un elenco di tutta una serie di "cartelle", e vorrei fare in modo che ogni singolo protocollo potesse essere associato ad una determinata cartella, quindi chiaramente cliccando su quella determinata cartella vorrei visualizzare tutti i protocolli che sono stati associati, e avevo provato a farlo utilizzando la tabella tab_associa, dove inserisco l'id della cartella (id_tree) e l'id del protocollo (id_protocollo).

Purtroppo però non riesco in nessun modo a venirne a capo.
Spero che la mia spiegazione possa esserti utile, perchè purtroppo non so come fare quanto mi chiedi.

Grazie mille
Guido

zseven Profilo | Senior Member

Ciao Lorenzo,
forse era questo che richiedevi per potermi aiutare?

CREATE TABLE [dbo].[tab_tree]( [ID_tree] [int] IDENTITY(1,1) NOT NULL, [parent_tree] [numeric](18, 0) NULL, [nome_tree] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, [cliente_tree] [bit] NULL, [fornitore_tree] [bit] NULL, [utente_tree] [bit] NULL, [elimina_tree] [bit] NULL ) ON [PRIMARY]

CREATE TABLE [dbo].[tab_protocolli]( [ID_protocolli] [int] IDENTITY(1,1) NOT NULL, [direzione_protocollo] [nvarchar](1) COLLATE Latin1_General_CI_AS NULL, [id_mittente] [numeric](18, 0) NULL, [id_destinatario] [numeric](18, 0) NULL, [tipo_protocollo] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, [oggetto_protocollo] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, [messaggio_protocollo] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, [data_protocollo] [datetime] NULL, [allegati_protocollo] [bit] NULL, [elimina_protocollo] [bit] NULL, [associa_protocollo] [bit] NULL ) ON [PRIMARY]

CREATE TABLE [dbo].[tab_associa]( [ID_associa] [int] IDENTITY(1,1) NOT NULL, [id_tree] [numeric](18, 0) NULL, [id_protocollo] [numeric](18, 0) NULL, [elimina_associa] [bit] NULL ) ON [PRIMARY]

Grazie
Guido
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