11 messaggi dal 17 novembre 2004
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
1.976 messaggi dal 27 luglio 2005
Contributi
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
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
11 messaggi dal 17 novembre 2004
non ho capito cosa devo fare
1.976 messaggi dal 27 luglio 2005
Contributi
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
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

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.