Select con join innestata

giovedì 19 aprile 2012 - 15.42
Tag Elenco Tags  MySQL 5.1

vspinelli Profilo | Newbie

Salve,
non riesco a capire come fare una select di questo tipo:

negozi
idnegozio, nomenegozio,idcatena

catena
idcatena, nomecatena,idpeop

proprietario
idprop,nomeproprietario

Come faccio ad avere nomeproprietario da una select fatta su negozi?
in pratica nella tabella negozi c'è l'id della catena che, dalla tabella catene, mi dovrebbe estrarre il nomeproprietario.

il risultato dovrebbe essere
negozio1, proprietario1
negozio2, proprietario2
negozio3, proprietario2
..
..

In realtà non credo sia una join innestata...

Grazie mille
..

lbenaglia Profilo | Guru

>Come faccio ad avere nomeproprietario da una select fatta su
>negozi?

Ciao Vincenzo,

Si tratta di 3 tabelle in relazione 1-a-molti e intendi recuperare una colonna dalla prima ed una dalla terza.
Per ottenere questo risultato sarà sufficiente eseguire una INNER JOIN tra la prima e la seconda tabella, il cui result set risultante lo metterai nuovamente in JOIN con la terza.
Osserva il seguente esempio:

USE tempdb; CREATE TABLE dbo.proprietario( idprop int NOT NULL PRIMARY KEY, nomeproprietario varchar(10) NOT NULL ); CREATE TABLE dbo.catena( idcatena int NOT NULL PRIMARY KEY, nomecatena varchar(10) NOT NULL, idprop int NOT NULL, CONSTRAINT FK_catena_proprietario FOREIGN KEY(idprop) REFERENCES dbo.proprietario(idprop) ); CREATE TABLE dbo.negozi( idnegozio int NOT NULL PRIMARY KEY, nomenegozio varchar(10) NOT NULL, idcatena int NOT NULL, CONSTRAINT FK_negozi_catena FOREIGN KEY(idcatena) REFERENCES dbo.catena(idcatena) ); INSERT dbo.proprietario VALUES (1, 'Lorenzo') , (2, 'David') , (3, 'Andrea'); INSERT dbo.catena VALUES (10, 'Catena 1', 1) , (20, 'Catena 2', 1) , (30, 'Catena 3', 3) , (40, 'Catena 4', 2); INSERT dbo.negozi VALUES (100, 'Negozio 1', 10) , (200, 'Negozio 2', 40) , (300, 'Negozio 3', 30) , (400, 'Negozio 4', 30); SELECT N.nomenegozio, P.nomeproprietario FROM dbo.proprietario AS P JOIN dbo.catena AS C ON P.idprop = C.idprop JOIN dbo.negozi AS N ON C.idcatena = N.idcatena; /* Output: nomenegozio nomeproprietario ----------- ---------------- Negozio 1 Lorenzo Negozio 2 David Negozio 3 Andrea Negozio 4 Andrea (4 row(s) affected) */ DROP TABLE dbo.negozi, dbo.catena, dbo.proprietario;

>Grazie mille
Prego.

Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/
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