Sql complicata
robbe2000 non è online. Ultima attività: 10/10/2008 13.56.56robbe2000
Inserito il: 10 ottobre 2008 11.01
8 messaggi dal 17 nov 2004 Istalla Microsoft Silverlight!
Ciao a tutti ho 3 tabelle

<b>personale</b> dove trovo l'anagrafica completa del personale
<b>scuola</b> dove trovo l'anagrafica della scuola
<b>PersonaleScuola</b> che è il legame del personalescuola e la scuola

Premetto che un personale può avere o non avere più di una scuola
ho bisogno di visualizzare tutti i personali in questa maniera:
- se non è collegato a nessuna scuola deve essere visualizzato lo stesso
- se ha una scuola deve essere visualizzato con il nome della scuola
- se ha più scuole deve essere visualizzato più volte

ho provato a fare questa query ma non ho il personale che non è collegato a nessuna scuola. Ho cercato di utilizzare left join ma non riesco a collegarlo correttamente con queste 3 tabelle qualcuno mi può aiutare per favore?

select personalescuolafism.*,anagrafica.nome_scu from PersonaleScuola_Scuole,personalescuolafism,anagrafica
where personalescuolafism.id=PersonaleScuola_Scuole.id_pers_scuola and
PersonaleScuola_Scuole.id_scuola=anagrafica.id
Microsoft Most Valuable Professional
Re: Sql complicata
Andrea Montanari non è online. Ultima attività: 05/12/2008 0.20.32Andrea Montanari
Inserito il: 10 ottobre 2008 13.05
contributi / Top Poster / Community manager / www.asql.biz / 998 messaggi dal 27 lug 2005 Istalla Microsoft Silverlight!
salve,
robbe2000 wrote:
Ciao a tutti ho 3 tabelle

personale dove trovo l'anagrafica completa del personale
scuola dove trovo l'anagrafica della scuola
PersonaleScuola che è il legame del personalescuola e la scuola
Premetto che un personale può avere o non avere più di una scuola ho bisogno di visualizzare tutti i personali in questa maniera: - se non è collegato a nessuna scuola deve essere visualizzato lo stesso
- se ha una scuola deve essere visualizzato con il nome della scuola - se ha più scuole deve essere visualizzato più volte

ho provato a fare questa query ma non ho il personale che non è collegato a nessuna scuola. Ho cercato di utilizzare left join ma non riesco a collegarlo correttamente con queste 3 tabelle qualcuno mi può aiutare per favore?

select personalescuolafism.*,anagrafica.nome_scu from
PersonaleScuola_Scuole,personalescuolafism,anagrafica
where personalescuolafism.id=PersonaleScuola_Scuole.id_pers_scuola and PersonaleScuola_Scuole.id_scuola=anagrafica.id

perche' utilizzi la vecchia sintassi ANSI 89 per la gestione dei join? rischi di farti del male...

SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.P (
Id int PRIMARY KEY,
Nome varchar(5)
);
CREATE TABLE dbo.S (
Id int PRIMARY KEY,
Nome varchar(5)
);
CREATE TABLE dbo.PS (
IdP int
CONSTRAINT fk_PS$has$Person
FOREIGN KEY REFERENCES dbo.P (Id),
IdS int
CONSTRAINT fk_PS$has$Scuola
FOREIGN KEY REFERENCES dbo.S (Id),
CONSTRAINT pk_PS PRIMARY KEY (IdP, IdS)
);
GO
INSERT INTO dbo.P VALUES ( 1, 'p-a' );
INSERT INTO dbo.P VALUES ( 2, 'p-b' );
INSERT INTO dbo.P VALUES ( 3, 'p-c' );
INSERT INTO dbo.P VALUES ( 4, 'p-d' );

INSERT INTO dbo.S VALUES ( 1, 's-a' );
INSERT INTO dbo.S VALUES ( 2, 's-b' );
INSERT INTO dbo.S VALUES ( 3, 's-c' );

INSERT INTO dbo.PS VALUES ( 1, 1 );
INSERT INTO dbo.PS VALUES ( 2, 2 );
INSERT INTO dbo.PS VALUES ( 2, 3 );
INSERT INTO dbo.PS VALUES ( 3, 1 );
INSERT INTO dbo.PS VALUES ( 3, 2 );
INSERT INTO dbo.PS VALUES ( 3, 3 );
GO
SELECT p.Nome AS [Persona], s.Nome AS [Scuola]
FROM dbo.P p
LEFT JOIN dbo.PS ps ON ps.IdP = p.Id
LEFT JOIN dbo.S s ON s.Id = ps.IdS
ORDER BY p.Id;
GO
DROP TABLE dbo.PS, dbo.P, dbo.S;
--<-------
Persona Scuola
-----
------
p-a s-a
p-b s-b
p-b s-c
p-c s-a
p-c s-b
p-c s-c
p-d NULL

saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
Re: Sql complicata
robbe2000 non è online. Ultima attività: 10/10/2008 13.56.56robbe2000
Inserito il: 10 ottobre 2008 13.09
8 messaggi dal 17 nov 2004 Istalla Microsoft Silverlight!
non ho capito cosa devo fare
Microsoft Most Valuable Professional
Re: Sql complicata
Andrea Montanari non è online. Ultima attività: 05/12/2008 0.20.32Andrea Montanari
Inserito il: 10 ottobre 2008 16.46
contributi / Top Poster / Community manager / www.asql.biz / 998 messaggi dal 27 lug 2005 Istalla Microsoft Silverlight!
salve,
robbe2000 wrote:
non ho capito cosa devo fare
in che senso?
hai avuto modo di leggere la query di proiezione?
tutto il resto e' (quello che avresti dovuto fare tu) un modo per preparare un esempio, fornendo un minimo di DDL e 3 righe di INSERT INTO al fine di avere uno scenario riproducibile.. la soluzione e' tendenzialmente standard ma e' basata su SQL Server (tu non hai indicato che dbms stia utilizzando). saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


PeppeDotNet - 1000 pt
gghi - 310 pt
fabrica - 50 pt

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008, SQL Prompt e 1 ebook!


COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums