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